PermissionSet

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

PermissionSet には、PermissionSetGroup との参照のみの子リレーションがあります。PermissionSet には、集約されたグループの権限が含まれます。

アクセスの許可に権限セットを使用できますが、アクセスの拒否には使用できません。

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

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

特別なアクセスルール

Summer '20 以降、このオブジェクトにアクセスできるのは、次のいずれかの権限を持つユーザーのみとなります。
  • 「設定・定義の参照」
  • 「セッション権限セットの有効化の管理」
  • 「権限セットの割り当て」
  • 「プロファイルと権限セットの管理」
指定された権限セット内の標準オブジェクトとカスタムオブジェクトの次の設定、割り当て、および権限を表示するには、「設定・定義を参照する」権限が必要です。
  • クライアント設定
  • 項目権限
  • レイアウトの割り当て
  • オブジェクト権限
  • 権限の連動関係
  • 権限セットのタブ設定
  • 権限セットグループのコンポーネント
  • レコードのタイプ

項目

項目名 詳細
Description
string
プロパティ
Create、Filter、Nillable、Group、Sort、Update
説明
権限セットの説明。最大 255 文字です。
HasActivationRequired
boolean
プロパティ
Create、Defaulted on create、Filter、Group、Sort、Update
説明
権限セットが、関連付けられた有効なセッションを要求するか (true)、否か (false) を示します。
IsCustom
boolean
プロパティ
Defaulted on create、Filter、Group、Sort
説明
true の場合、権限セットはカスタムで (システム管理者によって作成される)、false の場合、権限セットは標準で特定の権限セットライセンスに関連します。
IsOwnedByProfile
boolean
プロパティ
Defaulted on create、Filter、Group、Sort
説明
true の場合、権限セットがプロファイルによって所有されています。API バージョン 25.0 以降で利用できます。
Label
string
プロパティ
Create、Filter、Group、Sort、Update
説明
権限セットの表示ラベル。ユーザーインターフェースの [表示ラベル] に対応します。最大 80 文字です。
LicenseId
reference
プロパティ
Create、Filter、Group、Nillable、Sort
説明
この権限セットに関連付けられた関連 PermissionSetLicense または UserLicense の ID。API バージョン 38.0 以降で利用できます。非推奨で API バージョン 37.0 までしか使用できない UserLicenseId の代わりにこの項目を使用してください。
これは多態的なリレーション項目です。
リレーション名
License
リレーション種別
Lookup
参照先
PermissionSetLicense、UserLicense
Name
string
プロパティ
Create、Filter、Group、Sort、Update
説明
API のオブジェクトの一意の名前。この名前は、アンダースコアと英数字のみを含み、組織内で一意の名前にする必要があります。最初は文字であること、空白は使用しない、最後にアンダースコアを使用しない、2 つ続けてアンダースコアを使用しないという制約があります。ユーザーインターフェース内の [API 参照名] に対応します。最大 80 文字です。
NamespacePrefix
string
プロパティ
Filter、Group、Nillable、Sort
説明
管理パッケージの一部としてインストールされた権限セットの名前空間プレフィックス。権限セットがパッケージ化されていない場合または未管理パッケージの一部である場合、この値は空です。API バージョン 23.0 以降で利用できます。
PermissionsPermissionName
boolean
プロパティ
Create、Filter、Update
説明
権限ごとに 1 つの項目が対応します。true の場合、この権限セットに割り当てられたユーザーには、指定された権限が付与されています。項目数は、組織の権限およびライセンスタイプによって異なります。

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

ヒント

PermissionSetGroupId
reference
プロパティ
Filter、Group、Nillable、Sort
説明
権限セットが権限セットグループによって所有されている場合、この項目は権限セットグループの ID を返します。権限セットが権限セットグループによって所有されていない場合、この項目は null 値を返します。API バージョン 45.0 以降で利用できます。
これはリレーション項目です。
リレーション名
PermissionSetGroup
リレーション種別
Lookup
参照先
PermissionSetGroup
ProfileId
reference
プロパティ
Filter、Group、Nillable、Sort
説明
権限セットがプロファイルによって所有されている場合、この項目は Profile の ID を返します。権限セットがプロファイルによって所有されていない場合、この項目は null 値を返します。API バージョン 25.0 以降で利用できます。
これはリレーション項目です。
リレーション名
Profile
リレーション種別
Lookup
参照先
Profile
Type
reference
プロパティ
Filter、Group、Nillable、Sort
説明
API バージョン 46.0 以降で使用できます。
UserLicenseId
reference
プロパティ
Create、Filter、Group、Nillable、Sort
説明
この権限セットに関連付けられた UserLicense の ID。この項目は API バージョン 26.0 以降では nillable で、API バージョン 37.0 まで使用できます。API バージョン 38.0 以降では、LicenseId を使用します。

使用方法

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

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

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

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

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

メモ