Здравствуйте
Есть задача скрыть редактирование поля страны в детали по организационным ролям(супервайзер, руководители, менеджеры), закрыть право на редактирование для менеджеров.
Пробывал разные варианты через конфигурацию и добавления правил, все равно не работает.
Версия bpm7.6.
Как лучше мне это сделать?
Нравится
Здравствуйте, Сергей!
Вы можете видимость поля задать бизнес правилом. Параметр видимости будет определяться в момент открытия страницы редактирования (Вам необходимо переопределить метод onEntityItialized()). Замещенный метод onEntityItialized() должен вызывать родительский, а также проверять вхождение пользователя в роли (используйте ESQ по объекту SysAdminUnitInRole). Обратите внимание, что один пользователь может входить в несколько ролей.
Сформировал запрос к таблице SysAdminUnitInRole по своей Id
[sql]
SELECT *
FROM dbo.SysAdminUnit sa LEFT JOIN
dbo.SysAdminUnitInRole saur ON sa.Id = saur.SysAdminUnitId
WHERE sa.Id = 'мой Id'
[/sql]
Вернуло 3 строки - это означает, что в меня есть 3 роли?
Да, это значит что Администратор с sa.Id = 'мой Id' входит в три роли
Если вы выполните
[sql]
SELECT saur.SysAdminUnitId, saur.SysAdminUnitRoleId
FROM dbo.SysAdminUnitInRole saur
Where saur.SysAdminUnitId = 'мой Id'
[/sql]
То увидите айдишники ролей
Спасибо за подсказку, пытался вывести название ролей:
[sql]
SELECT saur.SysAdminUnitId, saur.SysAdminUnitRoleId, s.Name
FROM dbo.SysAdminUnitInRole saur Left JOIN
dbo.SysAdminUnit s ON saur.SysAdminUnitId = s.Id
WHERE saur.SysAdminUnitId = 'мой Id'
[/sql]
Результат имя моего контакта. Может я неправильно делаю?
так ваш запрос и выводит имя контакта из s.Name (SysAdminUnit)
можно сделать так
[sql]
select s.Name
from SysAdminUnit s
where s.id in (
select saur.SysAdminUnitRoleId
from dbo.SysAdminUnitInRole saur
where saur.SysAdminUnitId = 'мой Id'
)
[/sql]
Вот только одна запись похоже тоже будет вашим контактом, т.к. есть соответствие одинаковых id в SysAdminUnitInRole