ApexCode で Field Level Security チェックを行う
isCreateable / isUpdateable
例えば Some__c
というカスタムオブジェクトがあるとして、 full_name__c
というカスタム項目を永続化したい場合、事前に下記の様なメソッドでField Level Security チェックを行う。
public static void isCreateable(List<String> fieldNames, Schema.DescribeSObjectResult sObj) { Map<String, Schema.SObjectField> fieldMap = sObj.fields.getMap(); for (String fieldName : fieldNames) { Schema.SObjectField sObjField = fieldMap.get(fieldName); if (sObjField == null) { throw new SomeColumnNotFoundException(); } if (!sObjField.getDescribe().isCreateable()) { throw new SomeFlsException(); } } }
呼び出し側
isCreateable(new List<String> { 'full_name__c' }, Schema.SObjectType.Some__c);
Schema.DescribeSObjectResult
は Schema.SObjectType.Some__c
でカスタムオブジェクトのTypeを呼び出した際の抽象化された型。
もしかしてカスタム項目もString型で指定せず、ちゃんとした型で指定出来るかも?
isCreateable
を isUpdateable
にしてあげれば、UPDATEも同じようにチェック出来る。
isDeletable
削除チェックはもうちょっと単純。
public static void isDeletable(Schema.DescribeSObjectResult sObj) { if (!sObj.isDeletable()) { throw new SomeFlsException(); } }
呼び出し側
isDeletable(Schema.SObjectType.Some__c);