Skip to content

変更履歴タブと復元・削除ボタンの表示条件 ​

第3版作成 最終更新 (日本時間)
確認バージョン1.5.8.1

編集画面の「変更履歴の一覧」タブは、編集画面を開ける人なら誰にでも表示されます。履歴の「復元」には更新権限、「削除」にはサイト管理権限が必要で、さらにパラメータとテーブルの管理の設定の両方で許可されている必要があります。

操作必要な権限パラメータ(History.json)テーブルの管理
タブの表示なし(編集画面を開ければ表示)――
履歴の一覧の取得読み取り――
復元更新(Update = 4)Restore履歴の復元を許可
削除サイト管理(ManageSite = 128)PhysicalDelete履歴の削除を許可

図を読み込み中…

タブの表示条件 ​

タブ(#FieldSetHistories へのリンク)は、次の 3 つを満たすと表示されます。権限は見ていません(IssueUtilities.cs)。

  • 新規作成ではない(既存レコード)
  • 公開モード(/publishes/)ではない
  • 一覧の「モーダルで開く」によるダイアログ編集ではない

タブの中身は、タブを開いたときに Histories アクションで取得します。ここで読み取り権限がなければエラーになります(IssueUtilities.cs)。

タブ自体を消す設定はありません。隠したい場合はスクリプトで要素を消します。

js
$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)。

json
{
    "Restore": true,
    "PhysicalDelete": true
}

テーブルの管理(サイトごと) ​

テーブルの管理の「履歴」タブにある「履歴の復元を許可」(AllowRestoreHistories)と「履歴の削除を許可」(AllowPhysicalDeleteHistories)です(SiteUtilities.cs)。未設定のときは true として扱われます(SiteSettings.cs)。

アクセス権限(ユーザー・グループ・組織ごと) ​

権限の判定は、サイトのアクセス制御でユーザー・グループ・組織に付けた権限を合わせたものに、必要なビットが含まれるかで決まります。特権ユーザーは常に通ります。テーブルかレコードがロックされていると、更新と削除の権限は無いものとして扱われます(Permissions.cs)。

使い分けの例 ​

やりたいこと方法
一部の人だけ復元できるようにするその人たちに更新権限を付け、ほかの人は読み取りだけにする
このサイトだけ履歴を削除させないテーブルの管理で「履歴の削除を許可」を外す
どのサイトでも履歴を削除させないHistory.json の PhysicalDelete を false にする
更新はさせるが復元はさせないテーブルの管理で「履歴の復元を許可」を外す(権限では分けられない)

関連ページ ​

変更履歴

第3版「変更履歴タブと復元・削除ボタンの表示条件」にスクリーンショットを追加
第2版セッションの仕組みとデータベースのテーブル構成の解説を追加し、性能とスケールアウトの説明を修正
第1版履歴タブと復元・数値項目の通貨記号・画像プレビューモーダルの解説と、編集画面まわりの改修・設計メモを追加