Запретить удаление задачи всем, кроме ее автора (XRM 3.4.1)

Здравствуйте!
Возникла необходимость запретить редактирование и удаление записей в разделе "Задачи" для всех пользователей кроме ее автора или администратора системы.

Запрет на редактирование полей карточки редактирования, отвечающих за постановку задачи я реализовал (код ниже).

//В событии OnPrepare wnd_TaskEdit
if (dlData.Dataset.Values('AuthorID') != Connector.CurrentUser.ContactID && Connector.CurrentUser.IsAdmin == false) {
                fgMainData.IsEnabled = false;
                edtTitle.IsEnabled = false;
        } else {
                fgMainData.IsEnabled = true;
                edtTitle.IsEnabled = true;
        }

Теперь думаю о том, как запретить удаление задач не авторами. Была идея повешать return на событие нажатие кнопки удаления при условии, что текущий пользователь не является автором выделенной записи. Подскажите, как определить значение поля "AuthorID" для выделенной записи в разделе в скрипте wnd_TasksWorkspace. Быть может есть более правильный путь? Спасибо.

Нравится

8 комментариев

Если идти по пути интерфейса - можно "отключить" кнопку "удалить" если автор не совпадает с текущим пользователем для выделенной записи. Только делать это надо в wnd_TasksGridArea. В скрипте scr_TasksGridArea поправить функцию InitializeControls().
AuthorID получить можно как BaseGridArea.GridDataset.Values('AuthorID')

"Карпенков Никита Олегович" написал:Быть может есть более правильный путь?

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

Т.е. выбрав в фильтре спраава группу "Менеджеры" и настроив для нее некие права, вы получите, что при создании записи пользователем, входящим в группу "Менеджеры" на запись добавятся права согласно сделанным настройкам + полные права на данного пользователя

Раздел должен быть "Администрируемым по записям" (см. мануал)

"Андросов Дмитрий" написал:да, есть, и находится он в разделе Администрирование - права доступа по-умолчанию.

Есть нюанс.
Ответственный всегда получит полные права на задачу (см скрипт ds_TaskScript в нем в SelfOnDatasetAfterPost() вызывается функция GiveRightsToRecordOwner()). Вот если поправить GiveRightsToRecordOwner() поставить там CanDelete = false то все будет хорошо :smile:

"Александр Кудряшов" написал:Ответственный всегда получит полные права на задачу

да, так давно отключил, что уже и не помню :wink:

"Андросов Дмитрий" написал:да, так давно отключил, что уже и не помню :wink:

Теплые ламповые скрипты 3.х :cool:

Александр Кудряшов, спасибо за подсказку, BaseGridArea.GridDataset.Values('AuthorID') - то, что нужно.
Андросов Дмитрий, про права доступа знаю и использую, но задачу поставили именно такую, как я написал. Через права доступа это реализовать нельзя.

"Карпенков Никита Олегович" написал:задачу поставили именно такую, как я написал. Через права доступа это реализовать нельзя.

Через права доступа реализуется вполне запрет на удаление... кнопка удалить блокируется если прав нет...
только старые записи обработать придется :)

"Карпенков Никита Олегович" написал:задачу поставили именно такую

иногда входящие надо корректировать, но вам виднее

"Александр Кудряшов" написал:только старые записи обработать придется

и это решаемо http://www.community.terrasoft.ru/blogs/9611

Показать все комментарии