Мы используем пакетный Apex и используем 2 настраиваемых объекта для обработки CSV с некоторыми записями, а затем вставляем или обновляем их как записи учетной записи. Итак, я даю разрешения профилю пользователя, который запускает это задание в объекте учетной записи, на чтение, создание и редактирование доступа к объекту учетной записи. Однако я не хочу, чтобы этот пользователь просматривал учетные записи, поэтому в этом профиле я выбираю вкладку, скрытую в объекте учетной записи. Хотя я не вижу вкладку учетной записи, у меня все еще есть доступ к учетным записям. Например, если я скопирую и вставлю ссылку на запись учетной записи, например ( https://MYDOMAIN.lightning.force.com/lightning/r/Account/0011l00000Z5YSGFA3/view), у меня есть доступ к записи, и я могу ее изменить. Каков наилучший способ справиться с такими ситуациями?

0
Giorgos Galaios 6 Мар 2020 в 17:05

1 ответ

Лучший ответ

В зависимости от вашего варианта использования вы, вероятно, можете просто отключить разрешение CRUD для учетных записей. Apex может работать в «системном режиме», где он игнорирует обычную безопасность (безопасность полей, объектов и записей). Просто укажите «без совместного использования» в определении вашего класса (например, public without sharing class CsvBatch implements Database.Batchable<String>). Вы по-прежнему можете принудительно предоставлять общий доступ в каждом конкретном случае с помощью UserRecordAccess, описания вызовов и т. д.

3
sfdcfox 6 Мар 2020 в 17:08
Большое спасибо мужик! Могу я задать вам еще один вопрос: если я не укажу в своем классе Apex с/без общего доступа, какие настройки общего доступа по умолчанию будут применяться?
 – 
Giorgos Galaios
6 Мар 2020 в 17:43
1
В общем, он ведет себя как без обмена. См. salesforce.stackexchange.com/q/16121/2984 мой довольно длинный ответ на эту тему.
 – 
sfdcfox
6 Мар 2020 в 18:00