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

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

Apex は一般に、システムコンテキストで実行されます。つまり、コード実行時に、現在のユーザーの権限および項目レベルセキュリティは考慮されません。ただし、共有ルールは必ずスキップされるわけではありません。共有ルールが適用されないようにするには、必ず without sharing キーワードを使用してクラスを宣言する必要があります。executeAnonymous コールで実行された Apex コードと Connect in Apex は、常に現在のユーザーの共有ルールを使用して実行されます。executeAnonymous の詳細は、「匿名ブロック」を参照してください。

 実行ユーザーの項目レベルセキュリティ (FLS) とオブジェクト権限を適用するには、データベース操作のユーザーモードアクセスを指定します。「ユーザーモードでのデータベース操作」を参照してください。これらの権限は、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 アクセス制御メソッドをコールする場合、オブジェクトおよび項目レベルの権限の確認は、有効な共有ルールに追加して実行されます。共有ルールにより付与されるアクセスレベルがオブジェクトレベルの権限または項目レベルの権限と競合する場合があります。

考慮事項