ブログ

ServiceNow開発ブログ ACLでNobody権限を設定する

ServiceNow開発部ブログ第4回目です。
ACLでNobody権限を設定する方法についてです。

ACLでNobody権限を設定する

通常、ACLの権限にはRoleを指定しますが(このテーブルのWrite権限者はAdminだけ、とか)
誰にも操作させたくない場合はnobodyを指定する事で対応可能です。
ですがnobodyを簡単に設定する方法は無く(多分)、以下のようなちょっと面倒な手順が必要です。

手順1.元ACL作成

nobodyを設定する元となるACLを1つ作成する(既にあれば2に進んでOK)

手順2.元ACLのsys_idコピー

フィルターナビゲーターにsys_security_acl_role.listと打って実行。このテーブルから1で作ったレコードを探し、sys_idをコピーする。

手順3.nobodyに上書き

System Definition > Scripts - Backgroundで下記スクリプトを実行すると、1で作成したACLがnobodyに上書きされる
※nobodyのroleはOOTBレコードなのでsys_idはどの環境でも同一な筈(下記スクリプトb0594…の部分)
※この処理は更新セットにも記録されるので、そのまま移送も可能です

var rec = new GlideRecord("sys_security_acl_role");
rec.get("手順2でコピーしたsys_id");
if (rec){
rec.sys_user_role = 'b05940500a0a0aa70090a4893f6ff35d'; /* nobody role */
rec.update();
}

と、ここまで書きましたが同じことはACLのAdvancedにチェックをつけScriptで常にfalseをreturnする、という形でも対応できるので、そちらの方が無難かもしれません。(簡単に設定できないという事はnobodyの使用はあまり推奨されていない…?ただ一応、この方法でも挙動に問題は無さそうでした)

参考(コミュニティ記事)

How We can use Nobody Role ?

弊社公式Qiitaへも同様の記事を投稿しております。

pagetop