Всем снова привет!
Работая разработчиком и глядя на Орг с правами сис админа я часто не осознаю, что финальный юзер не будет видеть все записи, а будет видеть только свои записи или то, что с ним расшерино. И конечно RLS - это долгая история.
Но в руки попало небольшое приложение, которое заставило меня вновь обратиться к этой теме.
Главное действующее лицо в приложение - запись Запрос, с приватным wide-org defaults.
Она может создаваться как внутри-орговым юзером, так и портальным.
Суть в том, что Запрос ни секунды не принадлежит изначальному создателю - сразу после создания владельцем записи становится Очередь, откуда запись цепляется конкурентным исполнителем и с тех пор принадлежит ему.
Довольно типичная бизнес-схема.
Так вот о RLS.
В тот период когда Запрос принадлежит конкретному исполнителю - запись доступна для него и вверх по ролевой иерархии.
В тот период когда Запрос принадлежит Очереди она расшерина с соответствующей группой через sharing rules.
Но что делать с начальным создателем записи, который тоже должен ее видеть?
Для портального заявителя это решено через специальные портальные настройки sharing sets, которые дают доступ к записям по какому-то признаку. Очень просто.
Но как быть с внути-Орговым создателем записи? было применено программное создание шеринг-записи с API name
Запрос_share, как я понял - это вариант "мануального" шеринга.
Вот так это работает. Но я не знаю - это оптимальное решение? или есть еще какие-то удобные варианты зашерить запись с создателем, если запись меняет владельца по ходу своего жизненного цикла.
спасибо
Всем снова привет! Работая разработчиком и глядя на Орг с правами сис админа я часто не осознаю, что финальный юзер не будет видеть все записи, а будет видеть только свои записи или то, что с ним расшерино. И конечно RLS - это долгая история. Но в руки попало небольшое приложение, которое заставило меня вновь обратиться к этой теме. Главное действующее лицо в приложение - запись Запрос, с приватным wide-org defaults. Она может создаваться как внутри-орговым юзером, так и портальным. Суть в том, что Запрос ни секунды не принадлежит изначальному создателю - сразу после создания владельцем записи становится Очередь, откуда запись цепляется конкурентным исполнителем и с тех пор принадлежит ему. Довольно типичная бизнес-схема. Так вот о RLS. В тот период когда Запрос принадлежит конкретному исполнителю - запись доступна для него и вверх по ролевой иерархии. В тот период когда Запрос принадлежит Очереди она расшерина с соответствующей группой через sharing rules. Но что делать с начальным создателем записи, который тоже должен ее видеть? Для портального заявителя это решено через специальные портальные настройки sharing sets, которые дают доступ к записям по какому-то признаку. Очень просто. Но как быть с внути-Орговым создателем записи? было применено программное создание шеринг-записи с API name Запрос_share, как я понял - это вариант "мануального" шеринга. Вот так это работает. Но я не знаю - это оптимальное решение? или есть еще какие-то удобные варианты зашерить запись с создателем, если запись меняет владельца по ходу своего жизненного цикла. спасибо
[quote="Den Brown"]Так вот о RLS. [/quote] Что это? Первый раз такое сокращение вижу.
Record Level Security?)
Record Level Security?)
Млин, чего у нас тогда это называли просто Sharing (типа CRUD, FLS и Sharing) если есть такое замечательное сокращение? Беру на вооружение.
Млин, чего у нас тогда это называли просто Sharing (типа CRUD, FLS и Sharing) если есть такое замечательное сокращение? Беру на вооружение.
Да, я так привык называть, думал, что это уже устоявшийся термин...
Расскажите про ваши случаи, бизнес-логические ситуации, когда вам приходиломь применять Объект_share запись для шеринга конкретной записи, или с другой стороны можно, например, програмно добавить Юзера в Группу которая включена в sharing rules и т.о. програмно расшерить запис(и).
[quote="RasMisha"]Record Level Security?)[/quote] Да, я так привык называть, думал, что это уже устоявшийся термин... Расскажите про ваши случаи, бизнес-логические ситуации, когда вам приходиломь применять Объект_share запись для шеринга конкретной записи, или с другой стороны можно, например, програмно добавить Юзера в Группу которая включена в sharing rules и т.о. програмно расшерить запис(и).
Честно, не приходилось ни разу в реальности использовать.
Хотя как-то странно удивляться тому, что запись не принадлежит (со всеми вытекающими) создавшему при такой логике.
Честно, не приходилось ни разу в реальности использовать. Хотя как-то странно удивляться тому, что запись не принадлежит (со всеми вытекающими) создавшему при такой логике.
Использование Queue - частый и логичный кейс для больших бизнес приложений. И тут то и начинается party with RLS...
[quote="RasMisha"]Честно, не приходилось ни разу в реальности использовать. Хотя как-то странно удивляться тому, что запись не принадлежит (со всеми вытекающими) создавшему при такой логике.[/quote] Использование Queue - частый и логичный кейс для больших бизнес приложений. И тут то и начинается party with RLS...
я не про странность использования Queue (сами делаем так в последнем проекте), я про удивление от такого поведения.
Если честно не понятно, почему создатель записи вообще должен иметь доступ?
я не про странность использования Queue (сами делаем так в последнем проекте), я про удивление от такого поведения. Если честно не понятно, почему создатель записи вообще должен иметь доступ?
по требованию обработчика заказа исходный заявитель может добавлять инфу в запись или аттачменты к ней.
по требованию обработчика заказа исходный заявитель может добавлять инфу в запись или аттачменты к ней.
[quote="RasMisha"]Если честно не понятно, почему создатель записи вообще должен иметь доступ?[/quote] Вот это поведение кстати меня больше всего удивляет. Заказчики часто требуют чтобы после создания записи - запись автоматом переназначалась на другого owner или уходила на апрувал процесс и блокировалась. Ну это же вообще бред с точки зрения пользователя. Вот например я создаю запись - я обычно сохраняю и рассчитываю на то чтобы проверить запись и изменить если что (ну не получается с первого раза все правильно заполнить). И что в итоге? Запись я создал неправильную и она автоматом ушуршала дальше по процессам и я больше ничего не могу сделать. Да так можно все нервные клетки сжечь :D
для этого делается какой-нибудь статус "Saved as Draft" и в этом случае Owner не меняется)
для этого делается какой-нибудь статус "Saved as Draft" и в этом случае Owner не меняется)
А кто этот статус будет присваивать? Пользователь? Ты ему доверяешь?
А кто этот статус будет присваивать? Пользователь? Ты ему доверяешь?
Интересно, с какой целью была задействована queue. Чтобы обозначить открытый реквест?
Если в приоритете для создателя реквеста иметь к нему доступ на протяжении всего цикла, то почему бы не оставлять реквест на нем, а исполнителя прописывать в отдельное поле? Далее шарить запись среди исполнителей по критерию, упаковав их в группу.
Это так, мысли в слух. Кроме упомянутого написания кода с манул шэрингом сейчас ничего в голову не приходит, но не факт, что это будет супер оптимально в рамках развития приложения.
[quote]Суть в том, что Запрос ни секунды не принадлежит изначальному создателю - сразу после создания владельцем записи становится Очередь, откуда запись цепляется конкурентным исполнителем и с тех пор принадлежит ему. Довольно типичная бизнес-схема.[/quote] Интересно, с какой целью была задействована queue. Чтобы обозначить открытый реквест? Если в приоритете для создателя реквеста иметь к нему доступ на протяжении всего цикла, то почему бы не оставлять реквест на нем, а исполнителя прописывать в отдельное поле? Далее шарить запись среди исполнителей по критерию, упаковав их в группу. Это так, мысли в слух. Кроме упомянутого написания кода с манул шэрингом сейчас ничего в голову не приходит, но не факт, что это будет супер оптимально в рамках развития приложения.
[quote="Dmitry Shnyrev"]А кто этот статус будет присваивать? Пользователь? Ты ему доверяешь?[/quote] Я? Нет. Но вроде бы как автор топика хочет довериться. + Твой комментарий на счет возможности исправления, мне кажется странным давать править чужую(!) запись, даже если её создал ты. Другой вопрос, что в таком случае эта запись может быть доступна еще кому-то (по иерархии).
[quote="RasMisha"]странным давать править чужую(!) запись, даже если её создал ты. [/quote] Может я немного не так выразился. Немного поясню. Часто в компаниях есть процессы, когда после создания записи она должна блокироваться/менять owner/уходить на approv. И все это предусматривает то что тот кто создал эту запись больше не может ее изменить. Так вот я часто встречаю требования и вижу реализацию, когда запись запускают в процесс сразу после ее создания в триггере на after insert (т.е. заказчик пытается по максимуму автоматизировать процесс). Так вот мне кажется это плохая идея и я за то чтобы создатель записи сам решал когда надо отправить запись в процесс (заблокировать, переназначить). Пример еще конкретнее - есть approval process, который среди шагов имеет блокирование записи и переназначение на другого человека (manager). И send for approval происходит в триггере. Я, пользователь, создаю неверную запись и нажимаю сохранить - всё! Запись ушла, и я понимаю что отправил херню какую-то. Начинаю нервничать. Менеджер получает эту херню и тратит время на то чтобы режектнуть запись и еще потом ругает своего пользователя, мол "Вася что за херню ты мне прислал?". А ведь всего этого можно избежать, если пользователь сам нажмет кнопку Send for approval и сделает это сознательно и будет отвечать за свои поступок.
[quote="Dmitry Shnyrev"]менять owner[/quote] Когда настраивают org-wide defaults в private мне кажется это не на "шару" делают, а чтобы владелец записи знал, что никто ниже по иерарархии это запись трогать не будет. (странно, да?) Поэтому спрашивая меня [quote="Dmitry Shnyrev"]А кто этот статус будет присваивать? Пользователь? Ты ему доверяешь? [/quote] Ты предлагаешь сделать тоже самое. То что должен отправлять сам я согласен, поэтому и получается "черновая" запись, пока пользователь не отправил. Дальше она уже принадлежит тому, кому принадлежит. Manual Sharing как по мне официальный костыль.