- Salesforce provides an object FieldPermissions where field’s permission is stored for a permission set.
- Programmatically it’s only possible for Permission Set not for Profile.
- Here is Salesforce help article: https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_fieldpermissions.htm
- TIP: while providing field name, we need to pass full name of API Name along with <object_api_name>.<namespace_prefix><field_api_name>
public static void addToPermissionSet(String fieldName){ String fieldAPIName = assertFieldName(fieldName, true); PermissionSet ps = [SELECT Id,Name FROM PermissionSet WHERE Name = 'Example' LIMIT 1]; String fullAPIName = 'User.'+fieldAPIName; /* Example: User.TestMe__c */ System.debug('FullAPI:' + fullAPIName); FieldPermissions newPerm = new FieldPermissions(); newPerm.Field = fullAPIName; newPerm.ParentId = ps.Id; newPerm.PermissionsEdit = true; newPerm.PermissionsRead = true; newPerm.SobjectType = 'User'; Insert newPerm; }