0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SOQLで項目権限が確認できなくて困ってたのですが必須項目だったからでした

0
Posted at

はじめに

タイトル通りですが、項目権限をSOQLで取得して権限一覧表を作成するぞ~と思ったら、取得できていない項目がありなぜかしら、、、と調べていったら
原因が分かったのでこちらに残しておきます。

特定の項目の項目権限が取得できない

カスタムオブジェクトのプロファイル、権限セットごとの項目権限を整理しようと思い立ちました。
項目権限はFieldPermissions オブジェクトに格納されます。
以下のようなSOQLを実行しカスタムオブジェクトの項目権限を取得しました。

SELECT Field, PermissionsEdit, PermissionsRead, Parent.Profile.Name
FROM FieldPermissions
WHERE SobjectType = 'CustomObject__c'

結果を確認すると、特定の項目だけどのプロファイル、権限セットにも権限がついていないようなのです。
しかし、設定画面(UI)で項目の「項目レベルセキュリティの設定」を確認すると、どのプロファイルにも編集権限がついています。
なんでだ、、おかしい、、、

調査開始: なぜSOQLで取得できないのか?

通常、項目権限はFieldPermissions オブジェクトに格納されます。
しかし、特定の項目を指定しても、実行結果は0件です。
【試したこと】

  • オブジェクト名の確認→問題なし
  • Fieldを指定する形式(Object.Field)→問題なし
  • 実行ユーザーの権限確認→問題なし

それでも出ません。

発見: 設定画面での変更ができない

再度、設定画面(UI)で項目の「項目レベルセキュリティの設定」を確認すると、あることに気が付きました。
チェックボックスが編集できない
あれれ~…?さらに項目の設定をよく見てみると、
必須項目になっている!
必須ってことは、作成時に編集できないと困りますよね。。。

解説: 必須項目と権限の特殊な関係

Salesforceの保存時に必須な項目には独自の仕様があります。

  • 権限の強制
    • 「必須」=「入力しないと保存できない」ため、全プロファイルで編集権限が強制(固定)されます。
  • 項目権限(FieldPermissions)オブジェクトの仕様
  • 設定画面でのロック
    • 「参照のみ」や権限なしに設定できないよう、設定画面上でも読み取り専用となるようです。

さいごに

項目権限(FieldPermissions)オブジェクトで簡単に権限確認ができるぞと思っていたのですが、仕様を把握できておらず罠にはまりました。
「おかしいな?」と思ったら、オブジェクトマネージャーから設定を確認してみるのが、意外と近道かもしれません。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?