LoginSignup
8
9

More than 5 years have passed since last update.

SalesforceでSObjectやフィールドへのアクセス権限を取得する方法

Last updated at Posted at 2014-02-24

apexコード中でデータを作成・更新・削除などする場合は
実行しているユーザにその権限があるかどうかを判定してから行うようにしないと
セキュリティコードスキャナーで指摘されます。

ということで、オブジェクトレベルでのアクセス権限(CRUD)および
フィールドへのアクセス権限(FLS)の取得方法をまとめてみます。

このへんが参考になります。
isDeletable()isDelet"e"able() と書いてますがスペルミスです)

sample.cls
// すべてのSObjectを取得する場合
Map<String, Schema.SObjectType> sMap = Schema.getGlobalDescribe();

// SObjectの種類を指す
Schema.SObjectType eventType = Event.SObjectType;
// または、インスタンスから取得
SObject sObj = new Account();
Schema.SObjectType accountType = sObj.getSObjectType();

// Schema.DescribeSObjectResultというクラスを経由する
Schema.DescribeSObjectResult result = eventType.getDescribe();

// ----SObjectへのアクセス権限(CRUD)----
System.debug(result.isCreateable());
System.debug(result.isAccessible());
System.debug(result.isUpdateable());
System.debug(result.isDeletable());

// SObjectのフィールドを取得
// 以下のようにするとMap型で取得できる
Map<String, Schema.SObjectField> fieldMap = result.fields.getMap();

// ----フィールドへのアクセス権限(FLS)----
String fieldName = 'isRecurrence';
Schema.DescribeFieldResult fieldResult = fieldMap.get(fieldName).getDescribe();
System.debug(fieldResult.isCreateable());
System.debug(fieldResult.isAccessible());
System.debug(fieldResult.isUpdateable()); // (!)システム管理者でもfalse

オブジェクトでもフィールドでも
Describe***Resultクラスがそういったメソッドを持つ、と覚えれば良さげ。

公式リファレンス

8
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9