Всем привет!
При вызове метода onButtonClick необходимо проверять права у текущего юзера. Столкнулся с проблемой чтения прав. Похожая проблема обсуждалась тут, но линк неактивен.
https://community.terrasoft.ua/questions/kak-poluchit-dostup-do-sysadmi…
Есть такой код:
initData: function() { this.initializeActionButtons(); this.callParent(arguments); this.isUserInRole(JSConst.SYS_ADMIN_UNIT_ROLE.ROLE.SALES_MANAGER); this.isUserInRole(JSConst.SYS_ADMIN_UNIT_ROLE.ROLE.SALES_DEPARTMENT_MANAGER); this.isUserInRole(JSConst.SYS_ADMIN_UNIT_ROLE.ROLE.SYS_ADMIN); }, isUserInRole: function(roleId) { var currentUserId = Terrasoft.core.enums.SysValue.CURRENT_USER; var esqCheckUserPossibility = Ext.create("Terrasoft.EntitySchemaQuery", { rootSchemaName: "SysAdminUnitInRole" }); esqCheckUserPossibility.addColumn("id"); esqCheckUserPossibility.filters.logicalOperation = this.Terrasoft.LogicalOperatorType.AND; var currentUserInRole = esqCheckUserPossibility.createColumnFilterWithParameter( Terrasoft.ComparisonType.EQUAL, "SysAdminUnit", currentUserId); var isBelongToRoleFilter = esqCheckUserPossibility.createColumnFilterWithParameter( Terrasoft.ComparisonType.EQUAL, "SysAdminUnitRoleId", roleId); esqCheckUserPossibility.filters.add("UserFilter", currentUserInRole); esqCheckUserPossibility.filters.add("isBelongToRoleFilter", isBelongToRoleFilter); esqCheckUserPossibility.getEntityCollection(function (response) { if (!response && !response.success) { return; } if(!response.collection.isEmpty()) { if(roleId == JSConst.SYS_ADMIN_UNIT_ROLE.ROLE.SALES_MANAGER) { this.$IsUserHasSalesManagerRole = true; } else if(roleId == JSConst.SYS_ADMIN_UNIT_ROLE.ROLE.SALES_DEPARTMENT_MANAGER) { this.$IsUserHasSalesDepartmentManagerRole = true; } else if(roleId == JSConst.SYS_ADMIN_UNIT_ROLE.ROLE.SYS_ADMIN) { this.$IsUserHasSysAdminRole = true; } return; } /* if (callback) { callback.call(scope || this); } */ },this); }, onUpdateServiceProvisionClick: function() { if(this.$IsUserHasSalesManagerRole || this.$IsUserHasSalesDepartmentManagerRole) { if(this.$IsUserHasSysAdminRole) { this.callServiceProvisionService(this.$MasterRecordId, this.onCallServiceProvisionServiceCallback, this); } else { var message = this.get("Resources.Strings.MessageDependsOnUserRoleCaption"); this.showInformationDialog(message); } } else { this.callServiceProvisionService(this.$MasterRecordId, this.onCallServiceProvisionServiceCallback, this); } },
в методе isUserInRole(roleId) беру id текущего юзера
var currentUserId = Terrasoft.core.enums.SysValue.CURRENT_USER;
При подстановке тестовых айдишников в переменную currentUserId все ок, логика отрабатывает как надо потому что я под своей учеткой. Если зайти под учеткой менеджера при первом вызове метода ловлю в консоли ошибку "Недостаточно прав на чтение из таблицы SysAdminUnitInRole"
Предполагаю , что настройка прав на объекты может решить этот вопрос, но не знаю будет ли это чревато в итоге... Прошу у Вас, коллеги, помощи в данном вопросе
Нравится
Владислав, добрый день!
Доступ к объекту SysAdminUnitInRole происходит через веб-сервисы. Это связано с безопасностью – по этой причине через ESQ получить данные не получится. Для решения Вашей задачи рекомендую обратить внимание на схему детали SysFuncRoleInUserDetailV2. Выборка данных происходит по объекту SysUserInRole, а не по объекту SysAdminUnitInRole. Попробуйте работать с другим объектом.
Владислав, добрый день!
Доступ к объекту SysAdminUnitInRole происходит через веб-сервисы. Это связано с безопасностью – по этой причине через ESQ получить данные не получится. Для решения Вашей задачи рекомендую обратить внимание на схему детали SysFuncRoleInUserDetailV2. Выборка данных происходит по объекту SysUserInRole, а не по объекту SysAdminUnitInRole. Попробуйте работать с другим объектом.
или же написать вызов сервиса на c# и там все решить и вернуть ответ
Стас Гаврилюк,
Посчитал корректным писать это на клиенте и при инициализации сразу же раздавать права и манипулировать доступностью объектов в зависимости от роли пользователя.