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

Newer Version Available

This content describes an older version of this product. View Latest

オブジェクト権限と項目権限の適用

Apex は一般に、システムコンテキストで実行されます。つまり、コード実行時に、現在のユーザの権限、項目レベルセキュリティ、および共有ルールは考慮されません。​このルールの唯一の例外は、executeAnonymous コールおよび Chatter in Apex と共に実行される Apex コードです。executeAnonymous は常に、現在のユーザのフル権限を用いて実行されます。executeAnonymous の詳細は、「匿名ブロック」を参照してください。

Apex は、デフォルトでは、オブジェクトレベルおよび項目レベルの権限を適用しませんが、WITH SECURITY_ENFORCED を使用することにより、SOQL クエリでこれらの権限を適用できます。詳細は、「WITH SECURITY_ENFORCED を使用した SOQL クエリの絞り込み (ベータ)」を参照してください。

また、現在のユーザのアクセス権限レベルを確認する (Schema.DescribeSObjectResult の) sObject describe result メソッドおよび (Schema.DescribeFieldResult の) field describe result メソッドを明示的にコールすることにより、コードでオブジェクトレベルおよび項目レベルの権限を適用することもできます。この方法では、現在のユーザに必要な権限があるかどうかを確認し、ユーザに十分な権限がある場合に限り、特定の DML 操作またはクエリを実行できます。

たとえば、Schema.DescribeSObjectResultisAccessible, isCreateable メソッドまたは isUpdateable メソッドを呼び出すことにより、現在のユーザに sObject に対する参照、作成または更新のアクセス権があるかどうかをそれぞれ確認できます。同様に、Schema.DescribeFieldResult では、現在のユーザの項目に対する参照、作成または更新アクセス権を確認するためにコールできるこれらのアクセス制御メソッドを公開します。また、Schema.DescribeSObjectResult が提供する isDeletable メソッドをコールすることにより、現在のユーザに特定の sObject を削除する権限があるかどうかを確認できます。

次に、アクセス制御メソッドをコールする方法の例を示します。

取引先責任者のメール項目を更新する前にこの項目の項目レベルの更新権限を確認する
1if (Schema.sObjectType.Contact.fields.Email.isUpdateable()) {
2   // Update contact phone number
3}
取引先責任者を新規作成する前に取引先責任者のメール項目の項目レベルの作成権限を確認する
1if (Schema.sObjectType.Contact.fields.Email.isCreateable()) {
2   // Create new contact
3}
取引先責任者のメール項目を照会する前に、この項目の項目レベルの参照権限を確認する
1if (Schema.sObjectType.Contact.fields.Email.isAccessible()) {
2   Contact c = [SELECT Email FROM Contact WHERE Id= :Id];
3}
取引先責任者を削除する前に、取引先責任者のオブジェクトレベルの権限を確認する
1if (Schema.sObjectType.Contact.isDeletable()) {
2   // Delete contact
3}

共有ルールはオブジェクトレベルの権限および項目レベルの権限とは異なります。これら両方を設定することができます。共有ルールが Salesforce で定義されている場合、with sharing キーワードを使用してクラスを宣言することにより、クラスレベルで共有ルールを適用できます。詳細は、「with sharing、without sharing、および inherited sharing キーワードの使用」を参照してください。sObject describe result および field describe result アクセス制御メソッドをコールする場合、オブジェクトおよび項目レベルの権限の確認は、有効な共有ルールに追加して実行されます。共有ルールにより付与されるアクセスレベルがオブジェクトレベルの権限または項目レベルの権限と競合する場合があります。