ObjectPermissions
ユーザにオブジェクトへのアクセス権を付与するには、ObjectPermissions レコードを、ユーザに割り当てられた PermissionSet に関連付けます。ObjectPermissions レコードは、PermissionSet のみでサポートされ、Profile ではサポートされません。
サポートされているコール
create()、delete()、describeSObjects()、query()、retrieve()、update()、upsert()
項目
| 項目名 | 詳細 |
|---|---|
| ParentId |
|
| PermissionsCreate | |
| PermissionsDelete |
|
| PermissionsEdit |
|
| PermissionsModifyAllRecords |
|
| PermissionsRead |
|
| PermissionsViewAllRecords |
|
| SobjectType |
|
権限の連動関係
一部のユーザ権限には、オブジェクト権限との連動関係があります。たとえば、権限セットに「リード所有者の移行」権限が含まれる場合、そのリードオブジェクトの「参照」および「作成」権限も含��れます。
ObjectPermissions から親PermissionSet オブジェクトまで照会できます。次に例を示します。
1SELECT Parent.Name, Parent.PermissionsTransferAnyLead, PermissionsRead, PermissionsCreate
2FROM ObjectPermissions
3WHERE SobjectType = 'Lead'「すべてのデータの編集」権限によるオブジェクトアクセスの決定
SOQL を使ってオブジェクト権限を照会するときに、ユーザ権限が必要とする一部のオブジェクト権限が有効化されている場合があります。
ただし、「すべてのデータの編集」権限が有効になっている場合は例外です。この権限によってすべてのオブジェクト権限が有効化されますが、オブジェクト権限レコードが物理的にデータベースに保存されることはありません。そのため、「すべてのデータの参照」または「リードのインポート」などのユーザ権限によって必要とされるオブジェクト権限とは異なり、クエリは「すべてのデータの編集」権限を含む権限セットを返しますが、オブジェクト権限レコードには「000」で始まる無効な ID が含まれます。この ID は、オブジェクトに「すべてのデータの編集」権限によるフルアクセスがあることと、オブジェクト権限レコードを更新または削除できないことを示します。これらのオブジェクトからフルアクセスを取り除くには、「すべてのデータの編集」を無効にしてから、オブジェクト権限レコードを削除します。こうすることで、SOQL を使用してフルアクセスのあるすべてのオブジェクトを検索するときに、「すべてのデータの編集」によるフルアクセスか管理者が設定したフルアクセスかに関係なく、このアクセスを持つすべてのオブジェクトが返されます。
たとえば、次の SOQL は、「参照」権限が Merchandise__c オブジェクトに明示的に定義されているか、「すべてのデータの編集」によって暗示的に定義されているかに関係なく、Merchandise__c オブジェクトに「参照」を持つすべての権限セットを返します。
1SELECT Id, Parent.label, SobjectType, PermissionsRead,
2 Parent.PermissionsModifyAllData, ParentId
3FROM ObjectPermissions
4WHERE PermissionsRead = true and SobjectType = 'Merchandise__c'オブジェクト権限のネスト
1SELECT Id,Name,PermissionsTransferAnyLead,
2(SELECT Id, PermissionsRead from ObjectPerms where SobjectType='Lead')
3FROM PermissionSet
4WHERE PermissionsTransferAnyLead = true結果として、PermissionSet と関連する子オブジェクト (この場合 ObjectPermissions 間のリレーションを辿ることができます。これを行うには、PermissionSet オブジェクトから子リレーション (ObjectPerms、FieldPerms など) を使用するか、子オブジェクトから Parent.permission_set_attribute を持つ PermissionSet を参照します。
重要なのは、条件付き WHERE ステートメントを使用して結果セットを限定するタイミングを考慮することです。権限セットオブジェクトの属性に基づいてクエリを行うには、SOQL を子リレーションでネストします。一方、子オブジェクトの属性に基づいてクエリを行うには、クエリで権限セットの親属性を参照する必要があります。
1SELECT Id, Name, PermissionsModifyAllData,
2(SELECT Id, SobjectType, PermissionsRead from Objectperms)
3FROM PermissionSet
4WHERE PermissionsModifyAllData=true1SELECT Id, SObjectType, PermissionsRead, Parent.Id, Parent.Name, Parent.PermissionsModifyAllData
2FROM ObjectPermissions
3WHERE SObjectType='Merchandise__c'