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

CRUD および項目レベルセキュリティ (FLS)

Lightning コンポーネントでは、コンポーネントのセキュリティを確保するために、コンテンツセキュリティポリシーに加え、CRUD および項目レベルセキュリティが適用されます。

Lightning コンポーネントでは、オブジェクトを参照したり、Apex コントローラからオブジェクトを取得したりするときに、CRUD および FLS が自動的に適用されることはありません。つまり、このフレームワークでは、ユーザに CRUD アクセス権および FLS 表示権限がないレコードと項目は引き続き表示されます。CRUD と FLS は、Apex コントローラで手動によって適用する必要があります。たとえば、with sharing キーワードを Apex コントローラに含めることで、ユーザには Lightning コンポーネントでアクセス権を持つレコードのみが表示されます。さらに、レコードまたはオブジェクトに対する操作を実行する前に、isAccessible()isCreateable()isDeletable()isUpdateable() があることを明示的にチェックする必要があります。

次の例は、カスタム経費オブジェクトに対する推奨される操作実行方法を示します。

1public with sharing class ExpenseController {
2
3    // ns refers to namespace; leave out ns__ if not needed
4    // This method is vulnerable. 
5    @AuraEnabled
6    public static List<ns__Expense__c> get_UNSAFE_Expenses() {
7        return [SELECT Id, Name, ns__Amount__c, ns__Client__c, ns__Date__c, 
8            ns__Reimbursed__c, CreatedDate FROM ns__Expense__c];
9     } 
10
11    // This method is recommended.
12    @AuraEnabled
13    public static List<ns__Expense__c> getExpenses() {
14        String [] expenseAccessFields = new String [] {'Id',
15                                                       'Name',
16                                                       'ns__Amount__c',
17                                                       'ns__Client__c',
18                                                       'ns__Date__c',
19                                                       'ns__Reimbursed__c',
20                                                       'CreatedDate'
21                                                       };
22
23
24    // Obtain the field name/token map for the Expense object
25    Map<String,Schema.SObjectField> m = Schema.SObjectType.ns__Expense__c.fields.getMap();
26
27    for (String fieldToCheck : expenseAccessFields) {
28
29        // Check if the user has access to view field
30        if (!m.get(fieldToCheck).getDescribe().isAccessible()) {
31
32            // Pass error to client
33            throw new System.NoAccessException()
34
35           // Suppress editor logs
36           return null;
37        }
38    }
39 
40    // Query the object safely
41    return [SELECT Id, Name, ns__Amount__c, ns__Client__c, ns__Date__c, 
42            ns__Reimbursed__c, CreatedDate FROM ns__Expense__c];       
43    } 
44}

詳細は、CRUD および FLS の適用Lightning セキュリティに関する記事を参照してください。

メモ