この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

PermissionSet

ユーザのプロファイルを変更または再割り当てせずに、1 名以上のユーザに追加アクセス権を付与するために使用する権限のセットを表します。アクセスの許可に権限セットを使用できますが、アクセスの拒否には使用できません。このオブジェクトは、API バージョン 22.0 以降で使用できます。

サポートされているコール

create()delete()describeSObjects()query()retrieve()search()update()upsert()

項目

項目名 詳細
Description
string
プロパティ
CreateFilterNillableGroupSortUpdate
説明
権限セットの説明。最大 255 文字です。
IsOwnedByProfile
boolean
プロパティ
Defaulted on createFilterGroupSort
説明
true の場合、権限セットがプロファイルによって所有されています。API バージョン 25.0 以降で使用できます。
Label
string
プロパティ
CreateFilterGroupSortUpdate
説明
権限セットの表示ラベル。ユーザインターフェースの [表示ラベル] に対応します。最大 80 文字です。
Name
string
プロパティ
CreateFilterGroupSortUpdate
説明
API のオブジェクトの一意の名前。この名前は、アンダースコアと英数字のみを含み、組織内で一意の名前にする必要があります。最初は文字であること、スペースは使用しない、最後にアンダースコアを使用しない、2 つ続けてアンダースコアを使用しないという制約があります。表示ラベルは、ユーザインターフェースの [API 名] に対応します。最大 80 文字です。
NamespacePrefix
string
プロパティ
FilterGroupNillableSort
説明
管理パッケージの一部としてインストールされた権限セットの名前空間プレフィックス。権限セットがパッケージ化されていない場合または未管理パッケージの一部である場合、この値は空です。API バージョン 23.0 以降で使用できます。
PermissionsPermissionName
boolean
プロパティ
CreateFilterUpdate
説明
権限ごとに 1 つの項目が対応します。true の場合、この権限セットに割り当てられたユーザには、指定された権限が付与されています。項目数は、組織の権限およびライセンスタイプによって異なります。

SOAP API で使用可能な権限のリストを取得するには、describeSObjects() を使用します。

ヒント

ProfileId
reference
プロパティ
FilterGroupNillableSort
説明
権限セットがプロファイルによって所有されている場合、この項目は Profile の ID を返します。権限セットがプロファイルによって所有されていない場合、この項目は null 値を返します。API バージョン 25.0 以降で使用できます。
UserLicenseId
reference
プロパティ
CreateFilterGroupNillableSort
説明
この権限セットに関連付けられた UserLicense の ID。この項目は API バージョン 26.0 以降では nillable です。

使用方法

既存の権限セットをクエリするには、PermissionSet オブジェクトを使用します。

たとえば、「すべてのデータの編集」権限を含むすべての権限セットを検索するには、次を実行できます。

1SELECT Name, PermissionsModifyAllData
2FROM PermissionSet
3WHERE PermissionsModifyAllData=true

PermissionSetAssignment オブジェクトと合わせて使用すると、「すべてのデータの編集」などの特定の権限に割り当てられたすべてのユーザを返すネストされたクエリを作成できます。

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 を使用する場合、各権限セットまたはアクセス制御の関連セットを、最初はユーザが権限レコードを入力する空のコンテナであると考えてください。

API では、権限セットにユーザ権限、オブジェクト権限、および項目権限だけでなく、Apex クラスなどその他の設定の設定エンティティアクセス権を含めることができます。
  • ObjectPermissions および FieldPermissions オブジェクトは API バージョン 24.0 以降で使用できます。
  • SetupEntityAccess オブジェクトは、API バージョン 25.0 以降で使用できます。
ユーザ権限のみ PermissionSet API オブジェクトで管理され、その他すべての権限タイプは子 API オブジェクトで管理されます。
ユーザ、プロファイル、および権限オブジェクトの ERD

これらの子オブジェクトでは、アクセス権はレコードに保存されるため、レコードが存在しないということはアクセス権がないことを示します。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 を削除します。

すべての権限を false に設定してオブジェクト権限または項目権限を更新しようとすると、その権限レコードは自動的に削除されます。結果として、そのレコード 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 PermissionSet
次の例では、プロファイルによって所有されている権限セットを除く、すべての権限セットが返されます。
1SELECT Id, Label, ProfileId, Profile.Name, IsOwnedByProfile
2FROM PermissionSet
3WHERE IsOwnedByProfile = FALSE
権限セットには API の子オブジェクトが含まれているため、プロファイルによって所有されている権限セットの値をクエリできます。たとえば、次の例では、プロファイルのみに対して有効化されたすべてのオブジェクト権限レコードが返されます。
1SELECT Id,ParentId, PermissionsRead, SobjectType, Parent.ProfileId
2FROM ObjectPermissions
3WHERE Parent.IsOwnedByProfile = TRUE
プロファイルによって所有されている権限セットを含むすべての権限セットの ID を取得すると、PermissionSetAssignment オブジェクトを使用して、プロファイルの権限またはいずれかの権限セットを介してユーザにオブジェクトまたは項目へのアクセスを許可するかどうかを決定できます。たとえば、次の SOQL クエリでは Merchandise__c オブジェクトに対する「参照」権限を持つすべてのユーザを返し、プロファイルまたは権限セットを使用して権限を付与するかどうかを指定します。
1SELECT Assignee.Name, PermissionSet.Id, PermissionSet.isOwnedByProfile
2FROM PermissionSetAssignment
3WHERE PermissionSetId
4IN (SELECT ParentId
5FROM ObjectPermissions
6WHERE SObjectType = 'Merchandise__c' AND PermissionsRead = true)

プロファイルによって所有されている権限セットでは、クエリで返される Name 値および Label 値を使用しないでください。これらの値はいつでも変更される可能性があるためです。

メモ