Доброго времени суток всем!

Как известно, для создаваемых задач реализована функциональность выдачи прав доступа по умолчанию, запрещающих ответственному удалить задачу: функция GiveRightsToRecordOwner(Dataset).

Но, возникает необходимость, некоторым пользователям ограничить доступ и на другие записи, какого-либо раздела конфигурации, а это происходит на уровне СУБД, хранимыми процедурами.

Предлагаю вариант, позволяющий переназначить права доступа к записи пользователю, в момент когда он ее создает. Для этого, в сервис scr_Access добавим новую функцию :

function UpdateRightsToRecordOwner(Dataset) {

         var OwnerIDDataField = Dataset.DataFields('OwnerID');
     
     if (!OwnerIDDataField || !OwnerIDDataField.IsEnabled) {
          var OwnerID = Connector.CurrentUser.ContactID;
     }  else {
          var OwnerID = OwnerIDDataField.Value;
     }
                   
     var RightsDataset = GetItemRightsDatasetByItemDataset(Dataset);
     var RecordID = Dataset.KeyDataField.Value;
     var AdminUnitID = GetAdminUnitIDByUserContactID(OwnerID);
     
     ApplyDatasetFilter(RightsDataset, 'RecordID', RecordID, true);
     ApplyDatasetFilter(RightsDataset, 'UserContactID', OwnerID, true);
     EnableDatasetFields(RightsDataset, false); // Disable all datafields
     EnableDatasetFields(RightsDataset, true, ['ID']); // Enable the only one
     RightsDataset.Open();
     
          try {
              if (!RightsDataset.IsEmptyPage) {
                            RightsDataset.Edit();
                            RightsDataset.ValAsBool('CanDelete') = false;
                            RightsDataset.ValAsBool('CanChangeAccess') = false;
                            RightsDataset.Post();
              }
         } finally {
                   RightsDataset.Close();
         }

}

В разделе, к примеру, Контрагенты, в сервисе scr_Account на событие в обработчик события function SelfOnDatasetAfterPost(Dataset) вставьте вызов новой функции.

Рекомендую также сделать проверку на принадлежность пользователя к группе администраторв, перед вызовом функции ;)

        if (!Connector.CurrentUser.IsAdmin) {
                UpdateRightsToRecordOwner(Dataset);    
        }

На зебудьте подключить сервис scr_Access к scr_Account :wink:

Нравится

Поделиться

1 комментарий

Павел, есть вопросы:
1. Как используется эта строчка:

var AdminUnitID = GetAdminUnitIDByUserContactID(OwnerID);

2. Зачем проверка, что RightsDataset.IsEmptyPage не пустой?
3. Почему такая логика:

                            RightsDataset.ValAsBool('CanDelete') = false;
                            RightsDataset.ValAsBool('CanChangeAccess') = false;

4. Почему функция UpdateRightsToRecordOwner не вызывается для администраторов? Им не надо создавать права по умолчанию?

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

В общем во вкладке Файлы в Менеджере деталей есть кнопка "Добавить" с ниспадающим меню с различными пунктами "Добавить ...". По умолчанию кнопка называется "Добавить файл" и выполняет соответствующую функцию.
Вопрос в следующем:
Как изменить данное значение по умолчанию на любое другое, конкретно нужно установить "Добавить ссылку на файл".

Спасибо

______________
www.abs.com.kz
Агентство недвижимости АБС Royal Estate

Нравится

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

Просто пропишите вызов другого метода в OnClick кнопки. Сейчас там AddFiles(). Замените на

AddFileLink();
UpdateButtons();

Лучше в сервисе окна wnd_FilesDetailGridArea заменить событие OnClick для кнопки btnAddFile на amiAddLinkOnExecute + заменить Caption кнопки.
При этом, перед запуском приложения, желательно очистить кэш.

Спасибо, получилось.
______________
www.abs.com.kz
Агентство недвижимости АБС Royal Estate

"Агутин Алексей" написал:Лучше

Простите, чем лучше? Тем что на событии OnClick кнопки btnAddFile будет висеть amiAddLinkOnExecute?
Возможно кто-то скажет что это мелочь, но как по мне это студентческий подход и сопровождение системы с такими "доработками" со временем превращается в сплошной геморрой.

Уважаемый Underscore a.k.a., если делать так как вы предлагали, то надо переписать функцию amiAddFileOnExecute. Она используется не только для кнопки, но и для пункта выпадающего меню. А вы сами понимаете, что пользователю не понравится, когда выбираешь меню Добавить файлы, а вместо добавления файлов в систему будут добавляются ссылки.

Да, был не прав, уже в коробочной версии сделано криво. Там на btnAddFile.OnClick висит amiAddFileOnExecute.

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