Вхождение пользователя в функциональную\организационную роль

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

Подскажите пожалуйста как узнать входит ли пользователь в определенную функциональную или организационную роль на клиенте и сервере.

Нравится

6 комментариев

Здравствуйте.
В базе данных есть таблица SysUserInRole. Там содержится развязка вхождения пользователей в роли (поля SysUserID, SysRoleID). Сами пользователи и роли находятся в таблице SysAdminUnit.

Подскажите как добавить к стандартному полю Ответственный фильтрацию по определенной роли, использую SysUserInRole:

attributes: {
    "Owner": {
        dataValueType: Terrasoft.DataValueType.LOOKUP,
	lookupListConfig: { filters: [ function() {
		var filterGroup = Ext.create("Terrasoft.FilterGroup");
		filterGroup.add("IsPurchasingDepartment",
		Terrasoft.createColumnFilterWithParameter(
			Terrasoft.ComparisonType.EQUAL,
			"[SysUserInRole:SysUser:[SysAdminUnit:Contact].Id].SysRole",
			"eb2644b7-9647-440c-9a05-6318d8d9e3b2")); 
		return filterGroup;
		}]}
	}
}

При открытие появляется ошибка "Элемент коллекции с именем Id] не найден", насколько понял неправильно написано "[SysUserInRole:SysUser:[SysAdminUnit:Contact].Id].SysRole" использовал пример из SDK "Построение путей к колонкам относительно корневой схемы. 3) Колонка схемы по произвольному внешнему ключу"
с одной связью понятно, но для двух примера нет, подскажите как правильно построить путь, не получилось разобраться.

Такой уровень вложенности вероятно не получится сделать.
Попробуйте написать esq к таблице «SysAdminUnit» по условию «SysUserInRole» (join), и выберите из него Id этой самой «SysAdminUnit», прямо в функции фильтрации.
А полученный массив Id уже передайте через «createColumnInFilterWithParameters» как-то так:

define("AccountPageV2", ["AccountPageV2Resources", "GeneralDetails"],
function(resources, GeneralDetails) {
	return {
		entitySchemaName: "Account",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
		attributes: {
			"Owner": {
				dataValueType: Terrasoft.DataValueType.LOOKUP,
				lookupListConfig: {
					filter: function() {
 
						// массив айди из SysAdminUnit, где-то тут напишите esq вместо него
						var idList = ["5CE92315-6128-44BE-A175-238EC6E3609F", "85C1DE5F-DD7E-4F8D-8F97-D3D8630A2C2F"];
 
						var filterGroup = new Terrasoft.createFilterGroup();
						var filterById = Terrasoft.createColumnInFilterWithParameters("[SysAdminUnit:Contact:Id].Id", idList);
						filterById.comparisonType = Terrasoft.ComparisonType.EQUAL;
						filterGroup.add("filterById", filterById);
 
						return filterGroup;
					}
				}
			}
		},
		methods: {},
		rules: {},
		userCode: {}
	};
});

Только вместо idList разумеется, будет результат esq.

Максим, ESQ на клиенте асинхронны, т.е. ваш вариант не подходит.
Сделал через представление, но все таки хотелось бы узнать наверняка возможен ли желаемый уровень вложенности.

Желаемый уровень вложенности невозможен. А асинхронность можно побороть пользуясь колбеками. Примеры использования колбеков в esq есть в типовых схемах.

Максим Шевченко пишет:

Желаемый уровень вложенности невозможен

То есть, никак не узнать, входит ли пользователь в функциональную роль опосредованно (наример, является руководителем сотрудника, у которого есть данная функциональная роль)?  

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