Показать сообщение отдельно
Старый 02.06.2020, 18:46   #1  
alicedr is offline
alicedr
Участник
 
173 / 43 (2) +++
Регистрация: 06.07.2012
Адрес: Канада
D365 security subrole X++
Задача: ограничить пользователя от ввода отрицательных сумм в платежном журнале с помощью роли или привилегии.
Подзадача: новая роль или привилегия должна быть автоматом включена в стандартную рол "менеджер".

Решение: была создана новая роль "менеджер возврата", принадлежность к которой проверяется в ключевых моментах работы с платежным журналом.

Однако возникла непредвиденная проблема: роль "менеджер возврата" была добавлена как sub-role к роли "менеджер", и вот оттуда она не видна.

Так роль видна если она добавлена в роли пользователя:
X++:
select AotName from securityRole
            join securityUserRole
            where securityUserRole.User == axUserId
            && securityUserRole.SecurityRole == securityRole.RecId
            && securityRole.AotName == _roleName;
А вот так роль видна в AX2012 если она добавлена как под-роль в одну из уже назначенных ролей:
X++:
select  securityUserRole
				where securityUserRole.User == axUserId
			join securityRole   //manager
			join securitySubRole
				where securitySubRole.SecurityRole == securityRole.RecId
				&& securityUserRole.SecurityRole == securityRole.RecId
                              
            join securityRole_subrole  //return manager
				where  securitySubRole.SecuritySubRole == securityRole_subrole.RecId
                && securityRole_subrole.AotName == _roleName;
А вот в D365 запрос ничего не находит!!!!

Исследования доступных таблиц и представлений показал, что таблица SecuritySubRoles содержит только стандартные под-роли, и отображаются они по-другому, например, system user роль имеет под-роль office integration power user - это можно увидеть в списке ролей юзера в выпадающем из роли списке.

Однако из формы security configuration роль system user не имеет ничего в subroles.

Для моей кастомной роли "менеджер" все наоборот - он отображается одной строкой в ролях пользователя, несмотря на то, что он имеет под-роль, и в security configuration под-роль видна.

В АОТ обе роли выглядят одинаково.

Вопрос следующий - как найти является ли заданная роль подролью одной из уже назначенных ролей пользователя.

Update: SysUserManagement::userHasRole(curUserId(), #Role) тоже ненаходит подроль.

Последний раз редактировалось alicedr; 02.06.2020 в 19:38. Причина: update