Как ограничить доступ к действию "Удалить все записи" на детали
Есть деталь в разделе, на которой есть действие "Удалить всех согласующих"
Необходимо ограничить видимость этого действия, сделать его доступным только для сотрудников с ролью "Системные администраторы". Подскажите пожалуйста как это можно сделать?
Код ниже на скринах
и
Нравится
Добрый день.
Реализуйте доступ на эту функциональность через доступ на операции.
Пример реализации можно посмотреть, как реализован доступ на действие 'Экспорт в Excel'.
Добрый день.
Реализуйте доступ на эту функциональность через доступ на операции.
Пример реализации можно посмотреть, как реализован доступ на действие 'Экспорт в Excel'.
Я бы сделал проверку на админа через добавления доступа по операциям
init: function() {
this.callParent(arguments);
RightUtilities.checkCanExecuteOperation({
operation: "IsSysAdminUser"
}, function(result) {
this.set("IsSysAdminUser", result);
}, this);
}
После этого можно попробовать указать привязку visible к атрибуту IsSysAdminUser.
Если это не будет работать, тогда
init: function() {
this.callParent(arguments);
RightUtilities.checkCanExecuteOperation({
operation: "IsSysAdminUser"
}, function(result) {
this.set("IsSysAdminUser", result);
this.removeMenuItem();
}, this);
},
removeMenuItem: function() {
var toolsButtonMenu = this.get("ToolsButtonMenu");
if (toolsButtonMenu !== undefined && !this.get("IsSysAdminUser")) {
for (var key in toolsButtonMenu.collection.map) {
if (toolsButtonMenu.collection.map[key].values.Caption.bindTo === "Resources.Strings.DeleteMenuCaption") {//Пример проверки
toolsButtonMenu.removeByKey(key);
}
}
}
},
addRecordOperationsMenuItems: function(toolsButtonMenu) {
this.callParent(arguments);
//добавление элементов
//после добавления
this.removeMenuItem();
}
Вместо доступа по оцерациям, можно проверить через esq сделав выборку по таблице SysAdminUnitInRole, в SysAdminUnit = id текущего пользователя, в SysAdminUnitRole = 83A43EBC-F36B-1410-298D-001E8C82BCAD (это id из таблицы SysAdminUnit). В функции получения результата esq также this.set("IsSysAdminUser", ); this.removeMenuItem();
Завязываться на роль админа прямо в коде — будет работать, но идеологически некрасиво. Рано или поздно захочется дать кому-то ещё и придётся переписывать код. Куда лучше создать отдельную операцию с «говорящим» названием, проверять наличие прав на неё, а в разделе настройки прав дать право на неё группе админов.