PermissionSet
PermissionSet には、PermissionSetGroup との参照のみの子リレーションがあります。PermissionSet には、集約されたグループの権限が含まれます。
アクセスの許可に権限セットを使用できますが、アクセスの拒否には使用できません。
サポートされているコール
create()、delete()、describeSObjects()、query()、retrieve()、search()、update()、upsert()
特別なアクセスルール
- 「設定・定義の参照」
- 「セッション権限セットの有効化の管理」
- 「権限セットの割り当て」
- 「プロファイルと権限セットの管理」
- クライアント設定
- 項目権限
- レイアウトの割り当て
- オブジェクト権限
- 権限の連動関係
- 権限セットのタブ設定
- 権限セットグループのコンポーネント
- レコードのタイプ
項目
使用方法
既存の権限セットを照会するには、PermissionSet オブジェクトを使用します。
たとえば、「すべてのデータの編集」権限を含むすべての権限セットを検索するには、次を実行できます。
SELECT Name, PermissionsModifyAllData
FROM PermissionSet
WHERE PermissionsModifyAllData=true
PermissionSetAssignment オブジェクトと合わせて使用すると、「すべてのデータの編集」などの特定の権限に割り当てられたすべてのユーザーを返すネストされたクエリを作成できます。
SELECT Name, (SELECT AssigneeId FROM Assignments)
FROM PermissionSet
WHERE PermissionsModifyAllData=true
権限セットがユーザーに割り当てられていない場合、権限セットを作成または削除することもできます。
ユーザーライセンス
ユーザーライセンスは、権限セットで使用できる権限を制御します。
どの権限セットも 1 つのユーザーライセンスまたは権限セットライセンスに関連付けることができます。権限セットを異なるユーザーライセンスおよび権限セットライセンスを持つ複数のユーザーに割り当てる場合は、LicenseId を空のままにします。1 つの種類のライセンスを持つユーザーのみがこの権限セットを使用する場合は、LicenseId をその 1 つのユーザーライセンスまたは権限セットライセンスに設定します。権限セットライセンスに関連付けられた権限セットが必要な場合、LicenseId をその権限セットライセンスに設定します。LicenseId を取得するには、次のクエリを実行します。
SELECT Id, Name
FROM UserLicense
または、LicenseId に対してユーザーまたはプロファイルを照会します。
SELECT Id, Profile.UserLicenseId
FROM User
子オブジェクト
API を使用する場合、各権限セットまたはアクセス制御の関連セットを、ユーザーが権限レコードを入力する空のコンテナであると考えてください。
- ObjectPermissions および FieldPermissions オブジェクトは API バージョン 24.0 以降で使用できます。
- SetupEntityAccess オブジェクトは、API バージョン 25.0 以降で使用できます。
- PermissionSetGroupComponent オブジェクトは、API バージョン 45 以降で使用できます。
これらの子オブジェクトでは、アクセス権はレコードに保存されるため、レコードが存在しないということはアクセス権がないことを示します。SOQL クエリでレコードを返すには、各子オブジェクトに対する最小限の権限または設定が必要です。
権限は関連する複数のオブジェクトに保存されるため、SOQL を使用する場合は、どのようなクエリを作成するべきかを理解することが重要です。たとえば、オブジェクトに対する「削除」権限がある権限セットと、商品の返品を承認する権限がある (承認チェックボックスは項目権限で制御される) 権限セットを把握したいとします。権限セットを使用して SOQL の使用時に適切なクエリを行うことにより、ユーザーに権限を移行するか、あるいはユーザーに権限セットを割り当てるかなどの必要な情報を確実に取得できます。
たとえば、次のクエリでは Merchandise__c オブジェクトに対して「参照」権限が有効であるすべての権限セットが返されます。
SELECT SobjectType, ParentId, PermissionsRead
FROM ObjectPermissions
WHERE PermissionsRead = True AND SobjectType = 'Merchandise__c'
オブジェクトに対する「参照」権限を持つすべての権限セットを照会できます。ただし、オブジェクトのレコードが存在しないためにアクセス権がない権限セットを照会することはできません。たとえば、次のクエリではレコードは返されません。これは、レコードを返すには、少なくともオブジェクトに「参照」権限が必要であるためです。
SELECT SobjectType, ParentId, PermissionsRead
FROM ObjectPermissions
WHERE PermissionsRead = False AND SobjectType = 'Merchandise__c'
少なくともオブジェクトに対する「参照」権限がある場合は、同じオブジェクトのその他の権限に対する条件付きクエリを作成できます。たとえば、次のクエリでは、少なくとも「参照」権限はあるが「編集」権限がないオブジェクトのすべてのレコードが返されます。
SELECT ParentId, PermissionsRead, PermissionsEdit
FROM ObjectPermissions
WHERE PermissionsEdit = False AND SobjectType = 'Merchandise__c'
オブジェクト権限または項目権限をアクセス権なしに設定するには、権限を含むレコードを削除します。たとえば、特定の権限セットの Merchandise__c オブジェクトのすべてのオブジェクト権限を無効化するには、まず、クエリを実行して、オブジェクト権限レコードの ID を取得します。
SELECT Id
FROM ObjectPermissions
WHERE SobjectType = 'Merchandise__c'
次に、クエリで返された ID を削除します。
ネストされたクエリを使用した権限セットの表示
1 つの権限セットのすべての権限を表示する子リレーションを使用して、PermissionSet オブジェクトを作成できます。たとえば、次のクエリでは、すべての権限セットが返され、オブジェクトおよび項目に対する「リード所有者の移行」権限および「参照」権限が表示されます。
SELECT Label, PermissionsTransferAnyLead,
(SELECT SobjectType, PermissionsRead FROM ObjectPerms),
(SELECT SobjectType, Field, PermissionsRead FROM FieldPerms)
FROM PermissionSet
関連付けられているプロファイル
API バージョン 25.0 以降では、各プロファイルは、プロファイルのユーザー権限、オブジェクト権限、項目権限���および設定エンティティアクセス権設定を保存する権限セットと関連付けられます。プロファイルによって所有されている権限セットを照会することはできますが、変更はできません。
次の例では、プロファイルによって所有されている権限セットを含む、すべての権限セットが返されます。
SELECT Id, Label, ProfileId, Profile.Name
FROM PermissionSet
SELECT Id, Label, ProfileId, Profile.Name, IsOwnedByProfile
FROM PermissionSet
WHERE IsOwnedByProfile = FALSE
SELECT Id,ParentId, PermissionsRead, SobjectType, Parent.ProfileId
FROM ObjectPermissions
WHERE Parent.IsOwnedByProfile = TRUE
SELECT Assignee.Name, PermissionSet.Id, PermissionSet.isOwnedByProfile
FROM PermissionSetAssignment
WHERE PermissionSetId
IN (SELECT ParentId
FROM ObjectPermissions
WHERE SObjectType = 'Merchandise__c' AND PermissionsRead = true)