Установка прав доступа по умолчанию на создаваемые записи в Terrasoft
Доброго времени суток всем!
Как известно, для создаваемых задач реализована функциональность выдачи прав доступа по умолчанию, запрещающих ответственному удалить задачу: функция GiveRightsToRecordOwner(Dataset).
Но, возникает необходимость, некоторым пользователям ограничить доступ и на другие записи, какого-либо раздела конфигурации, а это происходит на уровне СУБД, хранимыми процедурами.
Предлагаю вариант, позволяющий переназначить права доступа к записи пользователю, в момент когда он ее создает. Для этого, в сервис scr_Access добавим новую функцию :
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) вставьте вызов новой функции.
Рекомендую также сделать проверку на принадлежность пользователя к группе администраторв, перед вызовом функции ;)
UpdateRightsToRecordOwner(Dataset);
}
На зебудьте подключить сервис scr_Access к scr_Account
Павел, есть вопросы:
1. Как используется эта строчка:
var AdminUnitID = GetAdminUnitIDByUserContactID(OwnerID);
2. Зачем проверка, что RightsDataset.IsEmptyPage
не пустой?
3. Почему такая логика:
RightsDataset.ValAsBool('CanDelete') = false; RightsDataset.ValAsBool('CanChangeAccess') = false;
4. Почему функция UpdateRightsToRecordOwner
не вызывается для администраторов? Им не надо создавать права по умолчанию?