Привет!
Я начинающий разработчик под Sf и меня интересует, собственно, сабж.
Например, есть у меня
update item;
if(Schema.SObjectType.Attachment.fields.Name.isUpdateable()) {
update item;
}Но есть случаи, когда нужно проверять не одно поле, а 5 полей. Тогда условие if с обычной проверкой разрастается до 5 проверок через &&.
Я написал метод, который получает на вход название класса обьекта и поля которые нужно проверить и делает эту проверку в цикле, что позволяет не мусорить в коде кучей проверок.
...
public static boolean isUpdateable(String objectName, String[] fieldsArr)
{
Schema.SObjectType typeObject = convertToSObjectType(objectName);
Map<String,Schema.SObjectField> m = typeObject.getDescribe().fields.getMap();for (String fieldToCheck : fieldsArr) {
if (!m.get(addNamespace(fieldToCheck)).getDescribe().isUpdateable()) {
throwMessage(objectName, fieldToCheck);
return false;
}}
return true;
}
...
Вызывается теперь проверка вот так
if(CheckPermissions.isUpdateable('Attachment', new String[] {'Name'})) {
update item;
}Но в данном случает security scanner говорит
Object: name in file: /classes/FAttachment.cls
L 32: item.Name = newName;
Object: item in file: /classes/FAttachment.cls
L 34: update item;
Почему он может не видеть проверки?
Есть такая проблема у Сканера. Он всего лишь сканер, а не искусственный интеллект - если ты динамически проверяешь права доступа, то он может это не понять.
Попробуй посмотри как реализована проверка вот здесь
https://github.com/CodeScience/CSUtils/wiki/Using-Security-Coding-Library-(ESAPI)
Вроде с этой либой проверка проходит (хотя не уверен). Но если проверка сканером и не сработает, то на "человеческом" ревью все будет ок.