項目作成時の権限セットの項目レベルセキュリティ付与を試してみる

# これはなに？
- [Learn MOAR Winter '23 for Admins](https://trailhead.salesforce.com/ja/users/teamtrailhead/trailmixes/quest-learn-moar-winter-23-for-admins?utm_campaign=learn_moar_winter_23&utm_medium=blog-link&utm_source=admin)のTrailmixで気になった機能である。項目作成時の項目レベルセキュリティ付与を権限セットでやる方法を試してみます。

https://admin.salesforce.com/blog/2022/learn-moar-in-winter-23-with-permission-sets-in-field-creation?utm_source=trailhead&utm_medium=trailmix&utm_campaign=learn_moar_winter_23&_ga=2.143732469.190521205.1667719829-1546668006.1603647587

:::note warn
Winter '23でベータリリースされたものです。
正式リリース版になった場合に記事の内容と異なっている可能性があります。
:::

# どんな機能なの？

| 権限セットパターン（新） | プロファイルパターン旧 | 
|-----------|------------|
| ![取引先 _ Salesforce.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/966f9af4-f79b-18c8-7753-fb6c9d4ff319.png)       | ![取引先 _ Salesforce (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/66a7009a-201f-4f2b-91a8-9fe4110e5705.png)        |

項目を作成時に項目レベルセキュリティを設定する際に
`プロファイル`ではなく`権限セット`を利用できるようになります。

# 何が便利なの？

- 権限をプロファイルではなく、権限セット + 権限セットグループをメインにして管理している場合に
    - 項目作成時に権限セットに項目レベルセキュリティ付与できる
       - 作成した後に別途権限セットを編集する手間が省ける
       - プロファイルに間違って無駄な権限を付与してしまうミスがなくなる

# そもそも権限セットをメインで利用するメリットとは？

よくあるのがプロファイルAでもBでも共通の業務をする
この際に権限セットで最小限に権限を作成し、機能や業務単位で権限セットグループで管理すると
権限を付与しやすい+後から編集しやすいのでプロファイルよりも管理しやすくなります。

権限セットと権限セットグループでの活用に関してはこちらの記事がとてもわかりやすいです。

https://sevendex.com/post/10716/

もちろん管理者目線でも管理しやすいですが、開発者目線でも管理しやすいです。

たとえば、プロファイルに項目レベルセキュリティを付与しSalesforceDXでプロファイルを取得しようと思うと

以下のようなパッケージファイルを書く必要があります。

※CustomFieldを一緒に定義しないと、CustomFieldに関する権限がない状態のプロファイルのxmlが取得される

https://developer.salesforce.com/docs/atlas.ja-jp.240.0.api_meta.meta/api_meta/meta_profile.htm

```xml: package.xml
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
    <types>
        <members>Account.Demo__c</members>
        <name>CustomField</name>
    </types>
    <types>
        <members>Admin</members>
        <name>Profile</name>
    </types>
    <version>55.0</version>
</Package>

```

毎回定義してプロファイルを落として...とやっていたらコンフリクトも起きますしめんどうですよね

そこで権限セットで取得してみます。

https://developer.salesforce.com/docs/atlas.ja-jp.240.0.api_meta.meta/api_meta/meta_permissionset.htm

```xml: package.xml
<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
    <types>
        <members>Obj_Account_View</members>
        <name>PermissionSet</name>
    </types>
    <version>55.0</version>
</Package>
```

取得した権限セットのxmlがこちらです。

```xml: Obj_Account_VIew.permissionset-meta.xml
<?xml version="1.0" encoding="UTF-8"?>
<PermissionSet xmlns="http://soap.sforce.com/2006/04/metadata">
    <fieldPermissions>
        <editable>false</editable>
        <field>Account.Demo__c</field>
        <readable>true</readable>
    </fieldPermissions>
    <hasActivationRequired>false</hasActivationRequired>
    <label>Obj_取引先_閲覧</label>
</PermissionSet>

```

単純にPermissionSetを指定するだけで、欲しい権限が全て取得できるのでpackageの記述が簡潔になります。
SalesforceDXを活用している方は、profileをメインにするより
権限セットと権限セットグループの運用に変更すると開発体験あがるかもしれません。


# やってみる

## 機能の有効化

Trailhead のハンズオン環境を使用します。

`設定>ユーザ>ユーザ管理設定`にある **項目作成時の権限セットの項目レベルセキュリティ (ベータ)** を有効化します。

![ユーザ管理設定 _ Salesforce.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/86a37ae9-54b6-29b8-3577-a2bd179f488f.png)

## 権限セットの作成

`設定>権限セット`にアクセスし新規作成します。

- 表示ラベル
    - Obj_取引先_閲覧

- API参照名
    - Obj_Account_VIew

今回は取引先閲覧専用の権限セットを作成しました。


![スクリーンショット 2022-11-27 3.01.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/b5ef0d48-f1a4-ba8d-3129-c6d2b60e9582.png)


# 項目の新規作成

`設定>オブジェクトマネージャー>取引先`

- ラベル
    - デモ
- データ型
    - テキスト
- 文字数
    - 255
- 項目名
    - Demo

![スクリーンショット 2022-11-27 3.08.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/b02d1ff4-a301-ad10-479b-3d49269321db.png)


# 項目レベルセキュリティの設定

**項目作成時の権限セットの項目レベルセキュリティ (ベータ)** を有効化したことにより
プロファイルではなく、権限セットに項目レベルセキュリティを付与できるようになっています。

今回は`Obj_取引先_閲覧` という閲覧専用の権限セットを作成したので参照にチェックをいれて保存します。

![取引先 _ Salesforce.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/966f9af4-f79b-18c8-7753-fb6c9d4ff319.png)


| 権限セットパターン（新） | プロファイルパターン旧 | 
|-----------|------------|
| ![取引先 _ Salesforce.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/966f9af4-f79b-18c8-7753-fb6c9d4ff319.png)       | ![取引先 _ Salesforce (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/66a7009a-201f-4f2b-91a8-9fe4110e5705.png)        |

# 項目レベルセキュリティの確認

作成した`デモ` という項目のページを開きます。

![取引先 _ Salesforce (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/50bbcd67-7fd4-22ab-e996-5b21d51334cf.png)

`項目レベルセキュリティの設定`を確認してみます。

![取引先 _ Salesforce (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/34e4d23d-6279-9a3d-893d-74f81bff615b.png)

項目作成時に参照権限を付与した権限セットが確認できます！

![スクリーンショット 2022-11-27 3.29.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/472760be-397a-46e4-0f62-a792a61fca95.png)


| 権限セットパターン（新） | プロファイルパターン旧 | 
|-----------|------------|
| ![スクリーンショット 2022-11-27 3.29.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/472760be-397a-46e4-0f62-a792a61fca95.png)       | ![スクリーンショット 2022-11-27 3.32.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/757c7dd7-e142-d208-ae12-6bb81cb4baba.png)      |

## 項目アクセス許可の参照

権限セットは確認できましたが、機能有効化前のプロファイル単位の項目レベルセキュリティはどこで確認するのでしょうか？
それは、**項目アクセス許可の参照**で確認できます。

![取引先 _ Salesforce (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/369bfad4-1124-dcc7-e7bd-99d7a149fcbf.png)

確認したい項目を選択します。今回作成した`デモ`を選択しました。

ここは基本見ている項目の内容が確認したいはずなので、選択肢のデフォルトを設定してもらえると確認が楽ですね...（アップデートに期待）

![スクリーンショット 2022-11-27 3.36.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/92b26435-d0e7-2963-68b0-0005f48d41fd.png)

確認いたいプロファイルの非表示というリンクをクリックします。

![取引先 _ Salesforce (5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/76e66c6a-8268-496a-f669-e5b6f13257cc.png)

確認までのステップ数は多いですが、無事確認できました！

![スクリーンショット 2022-11-27 3.42.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/f6b19bd6-7d87-aa34-b6ed-3b5eaa4b5449.png)


| 権限セットパターン（新） | プロファイルパターン旧 | 
|-----------|------------|
| ![スクリーンショット 2022-11-27 3.42.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/f6b19bd6-7d87-aa34-b6ed-3b5eaa4b5449.png)       |   ![スクリーンショット 2022-11-27 3.32.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445600/757c7dd7-e142-d208-ae12-6bb81cb4baba.png)    |

# 最後に

今回は、Winter '23で公開されたベータ機能を試してみました。
実際に自分が実務で活用している権限の管理方法が 権限セット + 権限セットグループをメインだったので待ってました！という機能でした。

Salesforceが実際にアップデートをしてきたという点も含め、
権限管理を権限セット + 権限セットグループを中心にしていくと 管理者的にも開発者的にも今後も管理しやすくなっていくと思います。
とはいえ、Salesforceのユーザが少ない場合はプロファイルだけで十分な場合もあると思いますので
権限セット・プロファイルどちらも今後も使いやすい画面になってくれることを期待ですね。

# 参考にさせていただいた記事

https://admin.salesforce.com/blog/2022/learn-moar-in-winter-23-with-permission-sets-in-field-creation?utm_source=trailhead&utm_medium=trailmix&utm_campaign=learn_moar_winter_23&_ga=2.143732469.190521205.1667719829-1546668006.1603647587

https://sevendex.com/post/10716/

https://sf.forum.circlace.com/articles/779428931752169472