Используем функцию
dbo.sec_hasAccessByUsersRoles(@username, '', [role]) = '1'
Примечание:
Если roles указано * - то доступ дается для всех, кто авторизован в системе
Если roles указано all - доступ дается всем пользователям (в том числе неавторизованным).
В остальных случаях указывайте роли доступа через запятую. Пример: admin, manager - доступ имеют только пользователи, у которых есть роль manager или admin
1. КРАЙНЕ ВАЖНО!!! Не доверяйте данным, которые приходят в sql снаружи (например, переменные itemID в форме). Их можно подделать и отправить совершенно любые данные. Обязательно проверяйте доступ у пользователя по username и его ролям + специфичные ограничения в запросах:
select * from pg_pages where forEditor='1' and id = @itemID
Здесь мы находим по входящему itemID, но при этом обрезаем данные по дополнительному условию (только для редактора можно взять данные по страницам в данном случае).
2. Используйте для компонентов начальные настройки безопасности по роли (поля users, roles у страниц, таблиц, форм и др. компонентов).
3. Чтобы избежать XSS атаки, используйте функцию dbo.as_antiXSS(str), чтобы избежать ввода злоумышленником скриптов через поля ввода.
Пример использования:
select dbo.as_antiXSS('asd')
В этом случае входные данные будут обработаны и любой HTML будет декодирован.
Примечание: по умолчанию защита от XSS включена во всех компонентах для неадминистративных ролей и неавторизованных пользователей.
Также в appsettings.json в параметре disableAntiXSSRoles вы можете установить какие роли могут беспрепятственно сохранять HTML в системе. По умолчанию это роли admin, siteManager, editor. Таким образом если обычный пользователь попробует записать скрипт.
Для элементов (таблицы, формы, метрики и др) указываются user, roles поля, на основании которых делается первичная базовая проверка доступа к объекту.
Более детальная проверка должна выполняться в хранимой процедуре на основе входящего параметра @username
Вспомогательные SQL функции для проверки доступа
Примечание