FieldPermissions
ユーザに項目へのアクセス権を付与するには、FieldPermissions レコードをユーザに割り当てられた PermissionSet に関連付けます。FieldPermissions レコードは、PermissionSet でのみサポートされ、Profile ではサポートされません。
サポートされているコール
create()、delete()、describeSObjects()、query()、retrieve()、update()、upsert()
項目
| 項目名 | 詳細 |
|---|---|
| Field |
|
| ParentId |
|
| PermissionsEdit |
|
| PermissionsRead |
|
| SobjectType |
|
使用方法
FieldPermissions は ObjectPermissions と同様に機能します。ただし、FieldPermissions には、項目名を返すための Field 属性が含まれています。
たとえば、次のクエリは少なくとも「参照」権限が含まれる FieldPermissions レコードをすべて返します。この結果には、項目、オブジェクト、および権限セット名が含まれます。
1SELECT SobjectType, Field, PermissionsRead, Parent.Name
2FROM FieldPermissions
3WHERE PermissionsRead = TrueFieldPermissions を照会する場合には、項目の親オブジェクトが含まれます。たとえば、Account オブジェクトの Type 項目と一致するすべての行を検索するには、次のクエリを作成します。
1SELECT Id, SobjectType, Field
2FROM FieldPermissions
3WHERE Field = 'Account.Type' AND SobjectType = 'Account'Account オブジェクトを使用して、プロファイルで裏付けられている権限セットを検索するには、次のようなクエリを使用できます。
1SELECT Id, ParentId, SobjectType, Field, PermissionsEdit, PermissionsRead, Parent.Name
2FROM FieldPermissions
3WHERE SobjectType = 'Account' and Parent.IsOwnedByProfile = true
4ORDER BY SObjectType, Fieldクエリの SELECT 行に、SobjectType と Field の両方を含める必要があります。また、項目を照会する場合、項目の完全な API 名をSobjectType.Field の形式で指定する必要もあります。
項目権限の特殊なプロパティ
自動採番項目と数式項目には、項目権限の機能に関する特殊なルールがあります。どちらにも FieldPermissions レコードがありますが、挿入と更新は PermissionsRead に制限されます。これらの項目でユーザに許可されるのは参照のみであるため、PermissionsEdit はどちらのデータ型にも許可されません。
次のデータ型は、常に参照可能とみなされるため、FieldPermissions レコードは返されません。
- Id
- CreatedById
- CreatedDate
- IsDeleted
- LastModifiedById
- LastModifiedDate
- SystemModStamp
次のデータ型は、常に参照可能および書き込み可能とみなされるため、FieldPermissions レコードは返されません。
- OwnerId
- 主従カスタム (関係) 項目
- 必須カスタム項目
その結果、ユーザに項目への何らかのアクセス権がある場合でも、次のクエリはレコードを返しません。
1SELECT Field, SobjectType, PermissionsRead
2FROM FieldPermissions
3WHERE Field='Id'項目が FieldPermissions レコードを返せるかどうかを判別するには、項目に対して describeSObject() をコールします。たとえば、describeSObject('Merchandise__c') は、項目のプロパティを含む、Merchandise カスタムオブジェクトのすべてのプロパティを返します。permissionable プロパティが false の項目 (このセクションに挙げたデータ型など) を使用している場合、項目権限レコードは存在しないため、それらに対するクエリ、挿入、更新、削除は実行できません。
カスタム活動項目の使用
ToDo と行動は別個のオブジェクトとみなされますが、共通の活動カスタム項目セットを共有します。そのため、カスタム ToDo 項目が作成されると、カスタム行動項目も作成されます。その逆も同様です。カスタム項目は、行動レイアウト、ToDo レイアウト、またはその両方に表示できます。
カスタム活動項目は、ToDo と行動で共有されますが、FieldPermissions レコードは ToDo と行動で別個に表示されます。ただし、一方の項目権限レコードを変更すると、もう一方も自動的に変更されます。たとえば、カスタム活動項目を作成し、権限セットで項目権限を割り当て、次のクエリを実行すると、クエリは同じ権限値を持つ 2 件のレコードを返します。
1SELECT Field, Id, ParentId, PermissionsEdit, PermissionsRead, SobjectType
2FROM FieldPermissions
3WHERE SobjectType = 'event' OR SobjectType ='task'いずれかのレコードを別の項目権限セット値で更新し、クエリを再び実行すると、両方のレコードについて同じ権限値が返されます。
項目権限のネスト
1SELECT PermissionsEditReadonlyFields,
2(SELECT SobjectType, Field, PermissionsRead, PermissionsEdit
3FROM FieldPerms
4WHERE SobjectType = 'Merchandise__c')
5FROM PermissionSet
6WHERE PermissionsEditReadonlyFields = trueその結果、PermissionSet と子関連オブジェクト (この場合は FieldPermissions) 間のリレーションを辿ることができます。これを行うには、PermissionSet オブジェクトから子リレーション (ObjectPerms、FieldPerms など) を使用するか、子オブジェクトから Parent.permission_set_attribute を持つ PermissionSet を参照します。
重要なのは、条件付き WHERE ステートメントを使用して結果セットを限定するタイミングを考慮することです。権限セットオブジェクトの属性に基づいてクエリを行うには、SOQL を子リレーションでネストします。一方、子オブジェクトの属性に基づいてクエリを行うには、クエリで権限セットの親属性を参照する必要があります。
1SELECT PermissionsEditReadonlyFields,
2(SELECT SobjectType, Field, PermissionsRead, PermissionsEdit
3FROM FieldPerms
4WHERE SobjectType = 'Merchandise__c')
5FROM PermissionSet
6WHERE PermissionsEditReadonlyFields = true1SELECT SobjectType, Field, PermissionsRead, PermissionsEdit, Parent.Name,
2 Parent.PermissionsEditReadonlyFields
3FROM FieldPermissions
4WHERE SObjectType='Merchandise__c'