ServiceNowでACL(Access Control Lists)を利用して特定の項目をユーザー毎に表示/非表示にする

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という項目を追加します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193272/c8cd1638-8217-b3db-dae8-fa2ec81dcb2b.png)
aaa, bbbというユーザーを作成します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193272/36ccc54d-3916-4a67-9893-df117ee3e00d.png)
aaa_role, bbb_roleというroleを追加して
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193272/c38943e3-51bb-98d5-3e9a-10166ed76ff1.png)
aaaユーザーにはaaa_role, bbbユーザーにはbbb_roleを設定します(以下の画面はaaaユーザーにaaa_roleを設定した画面です)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193272/04e58d52-6cd9-e3ca-c9d6-14d1a9ead8e7.png)
# ACLを操作する前にsecurity adminにElevateする
ACLを操作するにはsecurity adminという特別なroleを利用します画面右上のユーザーの名前が表示されているメニューを選択してメニューから[Elevate Roles]を選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193272/05b597bd-de10-4450-1867-79937d8b6d4d.png)
security adminをチェックして[OK]をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193272/6cf5b11a-97a6-f5f1-8d35-7cbef4ae63c4.png)
これでACLを操作できるようになりました
# TableにACLを設定
## レコード全体をread出来るように設定
CCCテーブルの設定画面の画面下部にAccess ControlsというRelated ListがありますTableを新規作成すると自動でcreate, read, write, deleteの4行が作成されていますこれらはレコード全体のcreate, read, write, deleteそれぞれの権限の設定です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193272/f5530d5d-2979-27e1-cb89-bfa70da12aff.png)
readの行の(i)アイコンをクリックしてレコードプレビュー画面を表示してから[Open Record]をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193272/90ed3a74-8faf-efb4-1299-174c6de8bfcc.png)
Tableを作成すると自動で出来るu_ccc_userというroleが設定されています
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193272/6f6fa453-cfa3-ce0d-0874-d8d67aef0e75.png)
u_ccc_userの下にaaa_roleとbbb_roleを追加して[Update]します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193272/25fbf8be-3cd6-6de3-dbfe-27b64c0f1046.png)
u_ccc_roleの他にaaa_roleとbbb_roleを持っている人がCCCテーブルのレコード全体をreadをすることが出来るようになりました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193272/5ce64a66-beda-c80d-9824-bfd7595db748.png)
## recordの特定の項目をread出来るように設定
ACLのRelated Listの[New]ボタンをクリックしてOperationをread, Nameのテーブル名の右にAAA項目, Roleにaaa_roleを設定して[Submit]して[Continue]します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193272/02b526f6-fec5-632d-bf3f-1b26d1e7f0ce.png)
u_ccc_u_aaaというACLが追加されました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193272/85877073-b5bb-801a-1e36-8416f16ebce0.png)
同様の手順でBBB項目にbbb_roleを設定してu_ccc_u_bbbというACLを追加します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193272/86b47804-679d-e55d-d5db-dbe480ef9c08.png)
# 動作確認
## 確認用レコードの追加
Filter navigatorにcccと入力して絞り込んだメニューからCCCsを選択してレコード一覧を表示して[New]ボタンをクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193272/8193956d-6509-ae16-1b5b-cbe23254aff7.png)
Formが表示されるのでAAA項目に"aaa", BBB項目に"bbb"を入力して[Submit]します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193272/e44259da-c7c3-52f1-2536-9eb08c19cd6a.png)
## ユーザーを切り替えて表示確認
画面右上のユーザー名が表示されているメニューを選択して[Impersonate User]を選択して
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193272/ba902eff-533a-8325-7168-dd0475d175ae.png)
aaaユーザーを選択して
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193272/be6ea46f-3b6a-0370-9d0a-c1b2af302831.png)
aaaユーザーに切り替えて
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193272/2fe8ab38-fe7f-f99e-b03d-480f423ead74.png)
Filter navigatorに"u_ccc.list"と入力してCCCテーブルのレコードリストを表示します(メニューの権限設定をしなかったので直接テーブルリストにアクセスしました)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193272/db8701ce-fab3-2f25-9f38-7d21edd8dc70.png)
リストの項目の表示/非表示のダイアログの中にBBB項目が無いことが確認出来ます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193272/51229501-c816-baff-5661-4546dec34efb.png)
レコードの(i)アイコンでレコードをプレビューして[Open record]をクリックしてFormに遷移します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193272/f63cb768-6d97-11a2-0ce6-a3447b1924cd.png)
FormにAAA項目しか表示されていないことを確認出来ました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193272/59ada9e3-54b5-b37f-3f24-df8f159c470a.png)
bbbユーザーにImpersonateして同様にAAA項目が表示されないことを確認出来ました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193272/55c13e46-0a67-b18a-eba7-70ea5052f66b.png)