Задача: ограничить пользователя от ввода отрицательных сумм в платежном журнале с помощью роли или привилегии.
Подзадача: новая роль или привилегия должна быть автоматом включена в стандартную рол "менеджер".
Решение: была создана новая роль "менеджер возврата", принадлежность к которой проверяется в ключевых моментах работы с платежным журналом.
Однако возникла непредвиденная проблема: роль "менеджер возврата" была добавлена как 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) тоже ненаходит подроль.