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クラスがそういったメソッドを持つ、と覚えれば良さげ。