Добавление права доступа к объекту при определенном значении поля
Здравствуйте!
Подскажите как правильно решить следующую задачу:
На контрагенте есть поле тип - выпадающий список со значениями: клиент, конкурент, поставщик и т.п.
Нужно при определенном значении типа конкурента добавлять права доступа определенной группе пользователей. Например, если выбран клиент, то добавить права группе пользователей отдела продаж, а если поставщик, то добавить права группе пользователей отдела снабжения.
Насколько понимаю, это задача должна решаться через скрипты на сохранении контрагента.
Куда и какой скрипт правльно вставить?
Нравится
При сохранении записи необходимо проверять изменение типа - событие AfterPost текущего Dataset, а для самой вставки записей прав лучше использовать процедуры СУБД.
"Кулак Олег" написал:
Спасибо, Олег.
а можете прокомментировать, почему лучше напрямую в бд выставлять права, а не через скрипты (например, ProcessGiveRecordRightsToContact)?
А можно ли как-то получить список всех ID-ок пользователей, входящих в определенную группу?
"Уймин Андрей" написал:А можно ли как-то получить список всех ID-ок пользователей, входящих в определенную группу?
Попробуйте для этой цели использовать сервис sq_UserInGroup
"Уймин Андрей" написал:Спасибо, Олег.
а можете прокомментировать, почему лучше напрямую в бд выставлять права, а не через скрипты (например, ProcessGiveRecordRightsToContact)?
Возможно у пользователя изменяющего значение поля тип не будет прав на изменение прав доступа к текущей записи.
"Уймин Андрей" написал:А можно ли как-то получить список всех ID-ок пользователей, входящих в определенную группу?
Андрей, лучше раздавать права группе пользователей, а не каждому в отдельности, все пользователи, которые в нее входят, также будут пользоваться этими правами, а вот если Вы раздадите их лично, то каждому новому сотруднику отдела продаж Вам нужно будет дораздать аналогичные права.
"Раловец Ольга" написал:лучше раздавать права группе пользователей
Полностью согласен с Ольгой. Это единственно верный вариант.
да, точно, конечно же, надо на группы! спасибо, Ольга и Олег!
а скрипты (в частности AfterPost) можно выполнять только под правами текущего пользователя?
Не сами скрипты. В скриптах Вы будете добавлять записи в таблицу прав с помощью сервисов DataSet, SelectQuery, а они при формировании запроса на вставку позаботятся о том, чтобы эти запросы выполнялись от имени текущего пользователя и соответственно с его правами. Это реализовано в ядре и изменить нельзя. А хранимые процедуры по умолчанию выполняются от имени создателя, следовательно будут пользоваться правами того, под кем Вы создавали хранимку, и поэтому Вы наверняка будете создавать ее под пользователем с максимальными правами, иначе с процедурой раздачи прав могут быть проблемы.
"Раловец Ольга" написал:
небольшое уточнение: а если создается новая запись, то у создающего пользователя ведь гарантированно будет право на добавление прав?
"Уймин Андрей" написал:ебольшое уточнение: а если создается новая запись, то у создающего пользователя ведь гарантированно будет право на добавление прав?
Да
Ну а если пользователь, у которого есть право на изменение контрагента, но нет права на изменение прав на эту запись, изменит тип контрагента и сохранит запись, то ваш скрипт перераздать права не сможет
Я бы рекомендовал для таких целей использовать триггеры. Хранимая процедура, которая может выдавать права и доступна для выполнения любому пользователю - это нормальная дыра в безопасности.