У нас был небольшой виджет, который позволял клиентам делиться записями, настроенными на модель частного обмена в нашем сообществе. Все было довольно просто, и это позволяло им просто выбирать пользователей, которые были видны через Sharing Sets, и создавать запись __Share в APEX.

Недавно мне сообщили, что возникает ошибка, но только со стороны сообщества. Кажется, что ничего не работает там, где работало. Мы используем лицензии Customer Community Plus.

Выдается ошибка: System.TypeException: DML operation INSERT not allowed on <Object>__Share, которая, по-видимому, указывает на отсутствие доступа к объекту. Это кажется странным, потому что они могут прекрасно взаимодействовать с объектом, чтобы создавать/редактировать/удалять их.

Я просмотрел модель обмена (она является частной как внутри, так и снаружи), я просмотрел профиль, их доступ и наборы общего доступа в сообществе. Как я уже сказал, они, кажется, прекрасно взаимодействуют с объектами, когда дело доходит до просмотра записей и их прав.

Кроме того, пользователи стандартной лицензии могут нормально использовать компонент, а также без проблем делиться им с пользователями сообщества. Они также видят записи, как и ожидалось.

Я пропустил обновление или что-то, из-за чего это больше не работает? Кто сталкивался с этим или сталкивался с такой же проблемой?

4
P. Lapointe 16 Фев 2019 в 00:35

1 ответ

Лучший ответ

Если вы ссылаетесь на Общий доступ к записи с помощью Apex< /a> и обратитесь к разделу (внизу страницы) Создание управляемого общего доступа Apex для пользователей Customer Community Plus, вы обнаружите, что объекты Share недоступны для лицензий Customer Community Plus. Полный текст документации приведен ниже (выделено мной).

Вам нужно будет решить эту ситуацию, используя подход, указанный в документации (используя without sharing).

Создание управляемого общего доступа Apex для пользователей Customer Community Plus

Пользователи Customer Community Plus ранее назывались пользователями Customer Portal. Общие объекты, такие как AccountShare и ContactShare, недоступны для этих пользователей. Если вы должны использовать общие объекты в качестве пользователя Customer Community Plus, рассмотрите возможность использования триггера, который по умолчанию работает с ключевым словом without sharing. В противном случае используйте внутренний класс с тем же ключевым словом, чтобы обеспечить успешное выполнение операции DML. Для включения этого доступа также можно использовать отдельный служебный класс.

Предоставление видимости через общие ресурсы вручную/апекс, записанные в объекты общего доступа, поддерживается, но сами объекты недоступны для пользователей Customer Community Plus. Однако другие пользователи могут добавлять общие ресурсы, предоставляющие доступ пользователям Customer Community Plus.

5
Community 15 Июн 2020 в 11:11
Похоже, что ключевое слово без обмена было недавно удалено в рамках проверки безопасности. Это нигде не было поймано и всплыло только сейчас. Ставить работает нормально. Будет проведено расследование, чтобы найти подходящий способ справиться с этим, поскольку совместное использование Lightning еще не реализовано.
 – 
P. Lapointe
16 Фев 2019 в 01:02
1
Это ваш виновник! Рад, что вы смогли найти его очень быстро.
 – 
Jayant Das
16 Фев 2019 в 01:02
Что вы могли бы сделать, так это иметь служебный (под)класс, который явно «без совместного использования», но выполняет только определенные функции. Обязательно прокомментируйте / задокументируйте, ПОЧЕМУ вы законно выполняете эту часть, не делясь ею. Контроллер основного компонента всегда должен быть «с совместным доступом», но он может вызывать утилиту для выполнения DML с повышенными привилегиями. В идеале утилита «без совместного использования» должна также выполнять некоторые проверки относительно законного варианта использования.
 – 
Charles T
16 Фев 2019 в 20:40