Как разграничивать права на уровне бизнес-логики хранимых процедур
Разграничение доступа осуществляется на основе ролей. Каждый компонент через настройки задает доступ по ролям (поле Роли). Но иногда требуется более точное, детальное разграничение доступа (например пользователь роли manager может иметь доступ только к определенным проектам, а не всем подряд).
Основная идея - создавать типовые функции проверки доступа к сущностям, а не размазывать бизнес-логику проверки доступа по всей системе.
Это упростит дальнейшее изменение логики проверки доступа (например, добавилась новая роль, изменена логика проверки для отдельных пользователей и т.д.).
Пример функции для сущности Проект. Мы проверяем по определенному праву доступа к целому проекту, а не к каждой отдельной части проекта - к тикету, к логам проекта и т.д.
ALTER FUNCTION [dbo].[sec_project_hasRight] (
@itemID int,
@username nvarchar(128),
@right nvarchar(128)
)
RETURNS bit
AS
BEGIN
declare @res bit = 0
-- для каждого права делаем свою бизнес логику проверки на основе itemID и username
if(@right in ('readBug', 'editBug') ) begin
if( ... CONDITION - HAS USER THIS RIGHT? ... ) begin
set @res = 1
end
end
if(@right in ('manageBugChecklist') ) begin
if( ... CONDITION - HAS USER THIS RIGHT? ... ) begin
set @res = 1
end
end
--- ...
RETURN @res
END
В компонентах мы вначале проверяем доступ. Если нет определенного права, то выдаем сообщение об ограничении доступа (или редирект)
if([dbo].[sec_project__hasRight](@itemID, @username, 'editDocs=')=0 ) begin
select 0 Result, 'No access' Msg
return
end
Примечание:
- Эти проверки не отменяют использование свойства компонентов Роли (roles). Данное поле надежно отсекает доступ по роли (даже если ваша проверка будет забыта внедрена, roles уже базово ограничит доступ к таблице или форме).
- Не вызывайте в where функцию проверки доступа (это будет медленно работать). Проверяйте доступ до выполнения операции. Всегда можно найти некий обобщенный объект, к которому можно проверить доступ перед выполнением операции. Другими словами, не нужно проверять доступ к каждой задаче проекта, требуется проверить доступ пользователя к данному проекту.
Google поиск по нашей документации
- Руководства
- Основа Falcon Space
- Основные компоненты
- Возможности
- Коммуникация с пользователем
- Дизайн, стилизация, юзабилити
- Лендинги
- Универсальный API
- Примеры интеграций
- Каталоги
- Навигация
- Документы
- Дополнительные компоненты
- Продвижение, SEO
- Системные моменты Как быстро перенести решение (таблицы, формы, страницы) на другую базу? Где я могу редактировать процедуру поиска, процедуру общих элементов Layout, процедуры периодического запуска и др? Как изменить длительность показа сообщений Отслеживание изменений хранимых процедур и страниц (logChanges) Форма обратной связи по ошибкам, предложениям suggestion Как разграничивать права на уровне бизнес-логики хранимых процедур Безопасная обработка данных и проверка доступа в хранимых процедурах Использование типовой разметки в виде сниппетов для решения различных задач Работа с редактором кода в личном кабинете разработчика Логирование изменений объектов на примере хранимых процедур Как логировать клики на определенных элементах в системе Обработка старых браузеров (сообщение об устаревшем браузере) Как отследить и ограничить большое количество однородных запросов на сайте Безопасность. Как скрыть некоторые заголовки (http headers) в запросах Логирование событий в приложении (trace) Отображение сообщения об offline (Нет сети) Рабочее место разработчика через терминал Обновляемые метки времени в сообщениях на сайте Подсказка по интерфейсам хранимых процедур компонентов Защита от CSRF атак через дополнительный токен в формах Дополнительные параметры в @parameters (во многих хранимых процедурах) Как логировать события в Falcon в другую базу (чтобы ограничить рост основной базы данных) Сообщение об использовании куки (Cookies) Действия в браузере actions JSON Как искать код некоего компонента (таблицы, формы и т.д.) на странице Как сделать так, чтобы почта отправлялась асинхронно без задержек Настройка диалоговых окон и alert окошек Работа со сниппетами кода Мелкие удобства для разработчика в личном кабинете Универсальная кнопка действия as_submit Режим показа таблицы/формы в alert окне Реализация системы анализа IP посетителей
- Системное администрирование
- HOWTO
- Таблицы
- Формы
- Загрузка файлов, картинок
- Работа с SQL
- HOWTO JS
- HOWTO Верстка
- Решение проблем
Выгода от использования Falcon Space
В 2-3 раза экономнее и быстрее, чем заказная разработка
Более гибкая, чем коробочные решения и облачные сервисы
Используйте готовые решения и изменяйте под свои потребности
- Шаг 1. Создать концепт проекта
- Шаг 2. Получить оценку бюджета (КП)
- Шаг 3. Заключить договор
- Шаг 4. Создать совместно техническое задание
- Шаг 5. Поэтапная реализация проекта