Вопрос

Как ограничить доступ к действию "Удалить все записи" на детали

Есть деталь в разделе, на которой есть действие "Удалить всех согласующих"

Изображение удалено.

Необходимо ограничить видимость этого действия, сделать его доступным только для сотрудников с ролью "Системные администраторы". Подскажите пожалуйста как это можно сделать?

Код ниже на скринах

Изображение удалено.

и 

Изображение удалено.

Нравится

3 комментария
Лучший ответ

Добрый день.

Реализуйте доступ на эту функциональность через доступ на операции.

Пример реализации можно посмотреть, как реализован доступ на действие 'Экспорт в 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();

Завязываться на роль админа прямо в коде — будет работать, но идеологически некрасиво. Рано или поздно захочется дать кому-то ещё и придётся переписывать код. Куда лучше создать отдельную операцию с «говорящим» названием, проверять наличие прав на неё, а в разделе настройки прав дать право на неё группе админов.

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