Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

ACL Scriptの学習コンテンツ

horie yuusuke
Mega Expert

ACL Scriptの記述方法についての学習コンテンツがあれば教えて頂けると幸いです。

10件の返信10

Ikeda1
Mega Guru

こんにちは

Script自体は条件の一致不一致を判断するだけです。

うまくいかない部分については、以下のコンテンツがとても丁寧にまとめられていると感じます。

ServiceNowのAccess Control List(ACL)の概要と評価のプロセス | ServiceNow研究所 (servicenow-lab.com)

 

以上、ご参考まで。

早々の返信ありがとうございます。
私としては、scriptの記述方法を勉強したいと思っています。

以下のスクリプトの各行が何を意味しているのかが分からないので、それが分かる学習コンテンツを探しています。

※以下はsn_si_incidentのwriteアクセスのACLに記述されていたscriptです。
var answer = gs.hasRole('sn_si.basic');
var accessUtil = new sn_sec_cmn.SecurityAccessUtils();
answer = accessUtil.hasSpecialReadAccess(current) || (answer && accessUtil.hasSecurityTagWriteAccess(current));

ACL Scriptは、Scriptを最後まで実行した後に、boolean変数のanswerがどの値になったかによって許可/拒否が決まります。
Scriptを最後まで実行した結果、answer = trueで終わった場合は許可の判定に、answer = falseで終わった場合は拒否の判定になります。

その前提で、ご提示いただいたScrpitを読み解くと以下の通りです。

 

 

var answer = gs.hasRole(‘sn_si.basic’);

 

1行目 : ログインユーザーが‘sn_si.basic’というロールを持っていれば、answer = trueとなる。そうでない場合はanswer = falseとなる。

 

 

var accessUtil = new sn_sec_cmn.SecurityAccessUtils();

 

2行目 : 3行目の条件判定で使うために、sn_sec_cmn.SecurityAccessUtilsクラスのインスタンスを作成

 

 

answer = accessUtil.hasSpecialReadAccess(current) || (answer && accessUtil.hasSecurityTagWriteAccess(current));

 

3行目 :「hasSpecialReadAccess()というメソッドを実施した結果がtrueである」または、「(1行目で評価した)answerがtrueかつ、hasSecurityTagWriteAccess()というメソッドを実施した結果がtrue」である場合は、answer = trueとなる。そうでない場合はanswer = falseに上書きされる。

 

総括すると、以下の条件に当てはまるUserは、このScriptで許可判定となります。

  • hasSpecialReadAccess()メソッドを実施した結果がtrueと判定されたユーザー
  • ‘sn_si.basic’というロールを持っており、かつ、hasSecurityTagWriteAccess()メソッドを実施した結果がtrueと判定されたユーザー

 

残念ながらsn_sec_cmn.SecurityAccessUtilクラスや、そのクラスのメソッドであるhasSpecialReadAccess()、hasSecurityTagWriteAccess()がどのような処理をしているかは調べてもあまり良い情報が見当たりませんでした。

 

返信ありがとうございます。構文の解説ありがとうございます。
肝心な部分(クラスやメソッド)についての情報は無いんですね、承知しました。