Доброго времени суток всем!
Как известно, для создаваемых задач реализована функциональность выдачи прав доступа по умолчанию, запрещающих ответственному удалить задачу: функция 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