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