Всем привет! 
При вызове метода 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"

Предполагаю , что настройка прав на объекты может решить этот вопрос, но не знаю будет ли это чревато в итоге... Прошу у Вас, коллеги, помощи в данном вопросе

Нравится

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

Владислав, добрый день!
Доступ к объекту SysAdminUnitInRole происходит через веб-сервисы. Это связано с безопасностью – по этой причине через ESQ получить данные не получится. Для решения Вашей задачи рекомендую обратить внимание на схему детали SysFuncRoleInUserDetailV2. Выборка данных происходит по объекту SysUserInRole, а не по объекту SysAdminUnitInRole. Попробуйте работать с другим объектом.

Владислав, добрый день!
Доступ к объекту SysAdminUnitInRole происходит через веб-сервисы. Это связано с безопасностью – по этой причине через ESQ получить данные не получится. Для решения Вашей задачи рекомендую обратить внимание на схему детали SysFuncRoleInUserDetailV2. Выборка данных происходит по объекту SysUserInRole, а не по объекту SysAdminUnitInRole. Попробуйте работать с другим объектом.

Дима Вовченко,
Спасибо! 

или же написать вызов сервиса на c# и там все решить и вернуть ответ

Стас Гаврилюк,

Посчитал корректным писать это на клиенте и при инициализации сразу же раздавать права и манипулировать доступностью объектов в зависимости от роли пользователя. 

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

Добрый день. Подскажите пожалуйста, как можно обойти доступ к SysAdminUnitInRole. Я обращаюсь к базе данных для того чтобы узнать состоит ли наш пользователь в определенной группе. Если такой имеется, то отрабатывает флаг с помощью которого потом отрабатывает отдельная логика. Но такой подход не срабатывает с таблицей SysAdminUnitInRole. (Проверял на другой таблице OrderProduct все отработало).

setCurrentUserGroup(){
var roleId = "CB438514-6C60-4500-B9C7-CE9F60822088"
var currId = Terrasoft.SysValue.CURRENT_USER.value;
var select = this.Ext.create("Terrasoft.EntitySchemaQuery", {
rootSchemaName: "SysAdminUnitInRole"
});
select.addColumn("Id");
var filterId = select.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "Id", currId);
select.filters.add("FilterId", filterId);
var filterGroupId = select.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "sysAdminUnitRole", roleId);
select.filters.add("FilterGroupId", filterGroupId);
var that = this;
select.getEntityCollection(function(result) {
// берем результаты выборки
if (result.success){
var collection = result.collection;
if (collection.getCount()){
that.set("IsSecurity", false);
}
}
}, this);
}

Нравится

2 комментария

Здравствуйте!

Посмотрите пример из базовой конфигурации:
http://www.community.terrasoft.ru/forum/topic/11726#comment-51431

"Безродный Андрей" написал:

Здравствуйте!

Посмотрите пример из базовой конфигурации:
http://www.community.terrasoft.ru/forum/topic/11726#comment-51431


Огромное спасибо.

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