変更履歴タブと復元・削除ボタンの表示条件
編集画面の「変更履歴の一覧」タブは、編集画面を開ける人なら誰にでも表示されます。履歴の「復元」には更新権限、「削除」にはサイト管理権限が必要で、さらにパラメータとテーブルの管理の設定の両方で許可されている必要があります。
| 操作 | 必要な権限 | パラメータ(History.json) | テーブルの管理 |
|---|---|---|---|
| タブの表示 | なし(編集画面を開ければ表示) | ― | ― |
| 履歴の一覧の取得 | 読み取り | ― | ― |
| 復元 | 更新(Update = 4) | Restore | 履歴の復元を許可 |
| 削除 | サイト管理(ManageSite = 128) | PhysicalDelete | 履歴の削除を許可 |
図を読み込み中…
タブの表示条件
タブ(#FieldSetHistories へのリンク)は、次の 3 つを満たすと表示されます。権限は見ていません(IssueUtilities.cs)。
- 新規作成ではない(既存レコード)
- 公開モード(
/publishes/)ではない - 一覧の「モーダルで開く」によるダイアログ編集ではない
タブの中身は、タブを開いたときに Histories アクションで取得します。ここで読み取り権限がなければエラーになります(IssueUtilities.cs)。
タブ自体を消す設定はありません。隠したい場合はスクリプトで要素を消します。
$p.events.on_editor_load = function () {
$('#EditorTabs a[href="#FieldSetHistories"]').parent().hide();
};表示を隠すだけなので、Histories アクションを直接呼べば一覧は取得できます。
復元・削除ボタンの表示条件
ボタンは履歴の一覧の上に HistoryCommands で出力されます(HtmlHistoryCommands.cs)。

| ボタン | 条件 |
|---|---|
| 復元 | Parameters.History.Restore かつ context.CanUpdate(ss) かつ ss.AllowRestoreHistories != false |
| 削除 | Parameters.History.PhysicalDelete かつ context.CanManageSite(ss) かつ ss.AllowPhysicalDeleteHistories != false |
| ボタン領域全体 | どちらかのパラメータが有効、items コントローラー、更新かサイト管理の権限がある、どちらかのサイト設定が許可、テーブルもレコードもロックされていない(!ss.Locked()) |
どちらのボタンも data-confirm による確認(ConfirmRestore・ConfirmPhysicalDelete)を挟んでから送信します。
実行時のチェック
ボタンを隠すだけでなく、実行時にもサーバー側で確かめています。
- 復元: パラメータとサイト設定を確認し(IssueUtilities.cs)、そのあと通常の更新と同じ
OnUpdatingの検証を通します。復元は内部的にはレコードの更新です。 - 削除:
OnDeleteHistoryでパラメータ・サイト設定を確認し、サイト管理権限がないか、レコードが読み取り専用ならエラーにします(IssueValidators.cs)。
期限付きテーブル(IssueUtilities.cs)で確認しましたが、記録テーブル・Wiki も同じテンプレートから生成されるので同じ条件です。
3 段階の設定
パラメータ(システム全体)
App_Data/Parameters/History.json の 2 つの値で、全サイトの機能を止められます。既定はどちらも true です(History.json)。
{
"Restore": true,
"PhysicalDelete": true
}テーブルの管理(サイトごと)
テーブルの管理の「履歴」タブにある「履歴の復元を許可」(AllowRestoreHistories)と「履歴の削除を許可」(AllowPhysicalDeleteHistories)です(SiteUtilities.cs)。未設定のときは true として扱われます(SiteSettings.cs)。
アクセス権限(ユーザー・グループ・組織ごと)
権限の判定は、サイトのアクセス制御でユーザー・グループ・組織に付けた権限を合わせたものに、必要なビットが含まれるかで決まります。特権ユーザーは常に通ります。テーブルかレコードがロックされていると、更新と削除の権限は無いものとして扱われます(Permissions.cs)。
使い分けの例
| やりたいこと | 方法 |
|---|---|
| 一部の人だけ復元できるようにする | その人たちに更新権限を付け、ほかの人は読み取りだけにする |
| このサイトだけ履歴を削除させない | テーブルの管理で「履歴の削除を許可」を外す |
| どのサイトでも履歴を削除させない | History.json の PhysicalDelete を false にする |
| 更新はさせるが復元はさせない | テーブルの管理で「履歴の復元を許可」を外す(権限では分けられない) |
関連ページ
- ユーザ権限の確認とサイト権限継承の部分追加・除外(
PermissionTypeの読み方) - 編集画面のカスタマイズ(選択したレコードを一括復元する)
- パラメータ
- データベースのテーブル構成(ベース・_deleted・_history)
- テナント管理画面に変更履歴を付ける(改修案)