version: Paris
やること
ServiceNowで特定の項目をユーザー毎に表示/非表示にします
ACL(Access Control Lists)というものを使います
ServieNowで特定の項目へのアクセス可否を設定するにはACL(Access Control Lists)というものを使います
以下ドキュメントへのリンクです
[Access control list rules | ServiceNow Docs]
https://docs.servicenow.com/bundle/paris-platform-administration/page/administer/contextual-security/concept/access-control-rules.html
※ACLの他にも同様のことを実現出来る機能があると思います例えばこちらの記事( https://qiita.com/20_percent_cooler/items/6d5b4c4e6c1994df9f78#%E7%89%B9%E5%AE%9A%E3%81%AE%E6%9D%A1%E4%BB%B6%E5%8B%95%E7%9A%84%E3%81%A7%E5%BF%85%E9%A0%88%E3%81%AE%E8%A8%AD%E5%AE%9A )ではUI Policyで特定ユーザーに画面項目のMandatoryの設定をしていますが同じ個所でVisibilityという設定をするとFormで項目の表示/非表示を設定することが出来ます(がListでは表示されてしまったかもなど厳密な権限設定が出来なかった様な気がするので本記事ではACLの利用をお勧めします)
事前準備
※操作はdeveliperインスタンスに最初に作成されているadminユーザーで行います
CCCというテスト用のTableを作成してAAA, BBBという項目を追加します
aaa, bbbというユーザーを作成します
aaa_role, bbb_roleというroleを追加して
aaaユーザーにはaaa_role, bbbユーザーにはbbb_roleを設定します(以下の画面はaaaユーザーにaaa_roleを設定した画面です)
ACLを操作する前にsecurity adminにElevateする
ACLを操作するにはsecurity adminという特別なroleを利用します画面右上のユーザーの名前が表示されているメニューを選択してメニューから[Elevate Roles]を選択します
security adminをチェックして[OK]をクリックします
これでACLを操作できるようになりました
TableにACLを設定
レコード全体をread出来るように設定
CCCテーブルの設定画面の画面下部にAccess ControlsというRelated ListがありますTableを新規作成すると自動でcreate, read, write, deleteの4行が作成されていますこれらはレコード全体のcreate, read, write, deleteそれぞれの権限の設定です
readの行の(i)アイコンをクリックしてレコードプレビュー画面を表示してから[Open Record]をクリックします
Tableを作成すると自動で出来るu_ccc_userというroleが設定されています
u_ccc_userの下にaaa_roleとbbb_roleを追加して[Update]します
u_ccc_roleの他にaaa_roleとbbb_roleを持っている人がCCCテーブルのレコード全体をreadをすることが出来るようになりました
recordの特定の項目をread出来るように設定
ACLのRelated Listの[New]ボタンをクリックしてOperationをread, Nameのテーブル名の右にAAA項目, Roleにaaa_roleを設定して[Submit]して[Continue]します
u_ccc_u_aaaというACLが追加されました
同様の手順でBBB項目にbbb_roleを設定してu_ccc_u_bbbというACLを追加します
動作確認
確認用レコードの追加
Filter navigatorにcccと入力して絞り込んだメニューからCCCsを選択してレコード一覧を表示して[New]ボタンをクリックします
Formが表示されるのでAAA項目に"aaa", BBB項目に"bbb"を入力して[Submit]します
ユーザーを切り替えて表示確認
画面右上のユーザー名が表示されているメニューを選択して[Impersonate User]を選択して
aaaユーザーを選択して
aaaユーザーに切り替えて
Filter navigatorに"u_ccc.list"と入力してCCCテーブルのレコードリストを表示します(メニューの権限設定をしなかったので直接テーブルリストにアクセスしました)
リストの項目の表示/非表示のダイアログの中にBBB項目が無いことが確認出来ます
レコードの(i)アイコンでレコードをプレビューして[Open record]をクリックしてFormに遷移します
FormにAAA項目しか表示されていないことを確認出来ました
bbbユーザーにImpersonateして同様にAAA項目が表示されないことを確認出来ました