Регистрация  |  Вход

RLS, sharing rules & sets и жизненный цикл записи

Всем снова привет!

Работая разработчиком и глядя на Орг с правами сис админа я часто не осознаю, что финальный юзер не будет видеть все записи, а будет видеть только свои записи или то, что с ним расшерино. И конечно RLS - это долгая история.

Но в руки попало небольшое приложение, которое заставило меня вновь обратиться к этой теме.

Главное действующее лицо в приложение - запись Запрос, с приватным wide-org defaults.

Она может создаваться как внутри-орговым юзером, так и портальным.

Суть в том, что Запрос ни секунды не принадлежит изначальному создателю - сразу после создания владельцем записи становится Очередь, откуда запись цепляется конкурентным исполнителем и с тех пор принадлежит ему.
Довольно типичная бизнес-схема.

Так вот о RLS.
В тот период когда Запрос принадлежит конкретному исполнителю - запись доступна для него и вверх по ролевой иерархии.

В тот период когда Запрос принадлежит Очереди она расшерина с соответствующей группой через sharing rules.

Но что делать с начальным создателем записи, который тоже должен ее видеть?

Для портального заявителя это решено через специальные портальные настройки sharing sets, которые дают доступ к записям по какому-то признаку. Очень просто.

Но как быть с внути-Орговым создателем записи? было применено программное создание шеринг-записи с API name

Запрос_share, как я понял - это вариант "мануального" шеринга.

Вот так это работает. Но я не знаю - это оптимальное решение? или есть еще какие-то удобные варианты зашерить запись с создателем, если запись меняет владельца по ходу своего жизненного цикла.

спасибо

Всем снова привет!

Работая разработчиком и глядя на Орг с правами сис админа я часто не осознаю, что финальный юзер не будет видеть все записи, а будет видеть только свои записи или то, что с ним расшерино. И конечно RLS - это долгая история.

Но в руки попало небольшое приложение, которое заставило меня вновь обратиться к этой теме.

Главное действующее лицо в приложение - запись Запрос, с приватным wide-org defaults.

Она может создаваться как внутри-орговым юзером, так и портальным.

Суть в том, что Запрос ни секунды не принадлежит изначальному создателю - сразу после создания владельцем записи становится Очередь, откуда запись цепляется конкурентным исполнителем и с тех пор принадлежит ему.
Довольно типичная бизнес-схема.

Так вот о RLS.
В тот период когда Запрос принадлежит конкретному исполнителю - запись доступна для него и вверх по ролевой иерархии.

В тот период когда Запрос принадлежит Очереди она расшерина с соответствующей группой через sharing rules.

Но что делать с начальным создателем записи, который тоже должен ее видеть?

Для портального заявителя это решено через специальные портальные настройки sharing  sets, которые дают доступ к записям по какому-то признаку. Очень просто.

Но как быть с внути-Орговым создателем записи? было применено программное  создание шеринг-записи с API name

Запрос_share, как я понял - это вариант "мануального" шеринга. 

Вот так это работает. Но я не знаю - это оптимальное решение? или есть еще какие-то удобные варианты зашерить запись с создателем, если запись меняет владельца по ходу своего жизненного цикла.

спасибо
 

Den Brown
Так вот о RLS.

Что это? Первый раз такое сокращение вижу.

[quote="Den Brown"]Так вот о RLS. [/quote]
Что это? Первый раз такое сокращение вижу.

Record Level Security?)

Record Level Security?)

Млин, чего у нас тогда это называли просто Sharing (типа CRUD, FLS и Sharing) если есть такое замечательное сокращение? Беру на вооружение.

Млин, чего у нас тогда это называли просто Sharing (типа CRUD, FLS и Sharing) если есть такое замечательное сокращение? Беру на вооружение.

RasMisha
Record Level Security?)

Да, я так привык называть, думал, что это уже устоявшийся термин...

Расскажите про ваши случаи, бизнес-логические ситуации, когда вам приходиломь применять Объект_share запись для шеринга конкретной записи, или с другой стороны можно, например, програмно добавить Юзера в Группу которая включена в sharing rules и т.о. програмно расшерить запис(и).

[quote="RasMisha"]Record Level Security?)[/quote]

Да, я так привык называть, думал, что это уже устоявшийся термин...

Расскажите про ваши случаи, бизнес-логические ситуации, когда вам приходиломь применять Объект_share запись   для шеринга конкретной записи, или с другой стороны можно, например, програмно добавить Юзера в Группу которая включена в sharing rules и т.о. програмно расшерить запис(и).

Честно, не приходилось ни разу в реальности использовать.
Хотя как-то странно удивляться тому, что запись не принадлежит (со всеми вытекающими) создавшему при такой логике.

Честно, не приходилось ни разу в реальности использовать.
Хотя как-то странно удивляться тому, что запись не принадлежит (со всеми вытекающими) создавшему при такой логике.

RasMisha
Честно, не приходилось ни разу в реальности использовать.
Хотя как-то странно удивляться тому, что запись не принадлежит (со всеми вытекающими) создавшему при такой логике.

Использование Queue - частый и логичный кейс для больших бизнес приложений. И тут то и начинается party with RLS...

[quote="RasMisha"]Честно, не приходилось ни разу в реальности использовать.
Хотя как-то странно удивляться тому, что запись не принадлежит (со всеми вытекающими) создавшему при такой логике.[/quote]

Использование Queue - частый и логичный кейс для больших бизнес приложений. И тут то и начинается party with RLS...

я не про странность использования Queue (сами делаем так в последнем проекте), я про удивление от такого поведения.
Если честно не понятно, почему создатель записи вообще должен иметь доступ?

я не про странность использования Queue (сами делаем так в последнем проекте), я про удивление от такого поведения.
Если честно не понятно, почему создатель записи вообще должен иметь доступ?

по требованию обработчика заказа исходный заявитель может добавлять инфу в запись или аттачменты к ней.

по требованию обработчика заказа исходный заявитель может добавлять инфу в запись или аттачменты к ней.

RasMisha
Если честно не понятно, почему создатель записи вообще должен иметь доступ?

Вот это поведение кстати меня больше всего удивляет.
Заказчики часто требуют чтобы после создания записи - запись автоматом переназначалась на другого owner или уходила на апрувал процесс и блокировалась.
Ну это же вообще бред с точки зрения пользователя.
Вот например я создаю запись - я обычно сохраняю и рассчитываю на то чтобы проверить запись и изменить если что (ну не получается с первого раза все правильно заполнить). И что в итоге? Запись я создал неправильную и она автоматом ушуршала дальше по процессам и я больше ничего не могу сделать. Да так можно все нервные клетки сжечь

[quote="RasMisha"]Если честно не понятно, почему создатель записи вообще должен иметь доступ?[/quote]
Вот это поведение кстати меня больше всего удивляет.
Заказчики часто требуют чтобы после создания записи - запись автоматом переназначалась на другого owner или уходила на апрувал процесс и блокировалась.
Ну это же вообще бред с точки зрения пользователя. 
Вот например я создаю запись - я обычно сохраняю и рассчитываю на то чтобы проверить запись и изменить если что (ну не получается с первого раза все правильно заполнить). И что в итоге? Запись я создал неправильную и она автоматом ушуршала дальше по процессам и я больше ничего не могу сделать. Да так можно все нервные клетки сжечь :D 

для этого делается какой-нибудь статус "Saved as Draft" и в этом случае Owner не меняется)

для этого делается какой-нибудь статус "Saved as Draft" и в этом случае Owner не меняется)

А кто этот статус будет присваивать? Пользователь? Ты ему доверяешь?

А кто этот статус будет присваивать? Пользователь? Ты ему доверяешь?

Суть в том, что Запрос ни секунды не принадлежит изначальному создателю - сразу после создания владельцем записи становится Очередь, откуда запись цепляется конкурентным исполнителем и с тех пор принадлежит ему.
Довольно типичная бизнес-схема.

Интересно, с какой целью была задействована queue. Чтобы обозначить открытый реквест?

Если в приоритете для создателя реквеста иметь к нему доступ на протяжении всего цикла, то почему бы не оставлять реквест на нем, а исполнителя прописывать в отдельное поле? Далее шарить запись среди исполнителей по критерию, упаковав их в группу.


Это так, мысли в слух. Кроме упомянутого написания кода с манул шэрингом сейчас ничего в голову не приходит, но не факт, что это будет супер оптимально в рамках развития приложения.

[quote]Суть в том, что Запрос ни секунды не принадлежит изначальному создателю - сразу после создания владельцем записи становится Очередь, откуда запись цепляется конкурентным исполнителем и с тех пор принадлежит ему. 
Довольно типичная бизнес-схема.[/quote]

Интересно, с какой целью была задействована queue. Чтобы обозначить открытый реквест? 

Если в приоритете для создателя реквеста иметь к нему доступ на протяжении всего цикла, то почему бы не оставлять реквест на нем, а исполнителя прописывать в отдельное поле? Далее шарить запись среди исполнителей по критерию, упаковав их в группу.


Это так, мысли в слух. Кроме упомянутого написания кода с манул шэрингом сейчас ничего в голову не приходит, но не факт, что это будет супер оптимально в рамках развития приложения.

Dmitry Shnyrev
А кто этот статус будет присваивать? Пользователь? Ты ему доверяешь?

Я? Нет.
Но вроде бы как автор топика хочет довериться. + Твой комментарий на счет возможности исправления, мне кажется странным давать править чужую(!) запись, даже если её создал ты.
Другой вопрос, что в таком случае эта запись может быть доступна еще кому-то (по иерархии).

[quote="Dmitry Shnyrev"]А кто этот статус будет присваивать? Пользователь? Ты ему доверяешь?[/quote]
Я? Нет.
Но вроде бы как автор топика хочет довериться. + Твой комментарий на счет возможности исправления, мне кажется странным давать править чужую(!) запись, даже если её создал ты.
Другой вопрос, что в таком случае эта запись может быть доступна еще кому-то (по иерархии).

RasMisha
странным давать править чужую(!) запись, даже если её создал ты.

Может я немного не так выразился.
Немного поясню.
Часто в компаниях есть процессы, когда после создания записи она должна блокироваться/менять owner/уходить на approv. И все это предусматривает то что тот кто создал эту запись больше не может ее изменить. Так вот я часто встречаю требования и вижу реализацию, когда запись запускают в процесс сразу после ее создания в триггере на after insert (т.е. заказчик пытается по максимуму автоматизировать процесс). Так вот мне кажется это плохая идея и я за то чтобы создатель записи сам решал когда надо отправить запись в процесс (заблокировать, переназначить).
Пример еще конкретнее - есть approval process, который среди шагов имеет блокирование записи и переназначение на другого человека (manager). И send for approval происходит в триггере. Я, пользователь, создаю неверную запись и нажимаю сохранить - всё! Запись ушла, и я понимаю что отправил херню какую-то. Начинаю нервничать. Менеджер получает эту херню и тратит время на то чтобы режектнуть запись и еще потом ругает своего пользователя, мол "Вася что за херню ты мне прислал?". А ведь всего этого можно избежать, если пользователь сам нажмет кнопку Send for approval и сделает это сознательно и будет отвечать за свои поступок.

[quote="RasMisha"]странным давать править чужую(!) запись, даже если её создал ты. [/quote]
Может я немного не так выразился.
Немного поясню.
Часто в компаниях есть процессы, когда после создания записи она должна блокироваться/менять owner/уходить на approv. И все это предусматривает то что тот кто создал эту запись больше не может ее изменить. Так вот я часто встречаю требования и вижу реализацию, когда запись запускают в процесс сразу после ее создания в триггере на after insert (т.е. заказчик пытается по максимуму автоматизировать процесс). Так вот мне кажется это плохая идея и я за то чтобы создатель записи сам решал когда надо отправить запись в процесс (заблокировать, переназначить).
Пример еще конкретнее - есть approval process, который среди шагов имеет блокирование записи и переназначение на другого человека (manager). И send for approval происходит в триггере. Я, пользователь, создаю неверную запись и нажимаю сохранить - всё! Запись ушла, и я понимаю что отправил херню какую-то. Начинаю нервничать. Менеджер получает эту херню и тратит время на то чтобы режектнуть запись и еще потом ругает своего пользователя, мол "Вася что за херню ты мне прислал?". А ведь всего этого можно избежать, если пользователь сам нажмет кнопку Send for approval и сделает это сознательно и будет отвечать за свои поступок.

Dmitry Shnyrev
менять owner

Когда настраивают org-wide defaults в private мне кажется это не на "шару" делают, а чтобы владелец записи знал, что никто ниже по иерарархии это запись трогать не будет. (странно, да?)
Поэтому спрашивая меня
Dmitry Shnyrev
А кто этот статус будет присваивать? Пользователь? Ты ему доверяешь?

Ты предлагаешь сделать тоже самое.
То что должен отправлять сам я согласен, поэтому и получается "черновая" запись, пока пользователь не отправил. Дальше она уже принадлежит тому, кому принадлежит. Manual Sharing как по мне официальный костыль.

[quote="Dmitry Shnyrev"]менять owner[/quote]
Когда настраивают org-wide defaults в private мне кажется это не на "шару" делают, а чтобы владелец записи знал, что никто ниже по иерарархии это запись трогать не будет. (странно, да?) 
Поэтому спрашивая меня
[quote="Dmitry Shnyrev"]А кто этот статус будет присваивать? Пользователь? Ты ему доверяешь? [/quote]
Ты предлагаешь сделать тоже самое.
То что должен отправлять сам я согласен, поэтому и получается "черновая" запись, пока пользователь не отправил. Дальше она уже принадлежит тому, кому принадлежит. Manual Sharing как по мне официальный костыль.