Декларативный фреймворк Evado служит для быстрого создания веб-приложений без написания кода. Модули фреймворка предоставляют готовый функционал с унифицированным веб-интерфейсом:
- идентификация и авторизация пользователей;
- система разграничения доступа;
- валидация форм;
- загрузка файлов (в локальные и облачные хранилища);
- обработка изображений (масштабирование, превью, водяной знак);
- пользовательские уведомления.
Открытый исходный код, модульная структура и AJAX API гарантируют безграничные возможности расширения.
Права доступа
Веб-приложение, созданное с помощью фреймворка Evado, использует ролевую систему управления доступом (RBAC), состоящую из следующих компонентов.
Разрешения
Разрешение - определяет возможность выполнить определенное действие. Например, загрузить файл, войти в модуль, создать объект и тому подобное. Само разрешение это действие не реализует. Оно представляет своеобразный замок, который навешивается на действие. Если пользователю назначено соответствующее разрешение, то он получает доступ к действию.
Разрешения могут быть вложенными друг в друга. Проверка доступа идет снизу вверх - от запрошенного разрешения до роли, которая содержит его или его родителей. Это позволяет сформировать удобную структуру управления доступом.
Роли
Роль эквивалентна разрешению, но фактически выступает как контейнер разрешений. Именно роль назначается пользователю, а вместе с ней и все те разрешения, которые она содержит. Пользователю может быть назначено несколько ролей одновременно.
Можно представить роли как обязанности сотрудника. Например, роль редактор содержит разрешения для редактирования любых статей.
По умолчанию гостевым (анонимным) пользователям назначается роль guest, а идентифицированным - роль user.
Правила
Часто бывает необходимо предоставлять доступ в зависимости от данных в момент выполнения проверки. Например, если редактировать статью может только ее автор, то необходимо узнать является ли текущий пользователь автором статьи. Для этого используются правила.
Правило - это JavaScript класс, который проверяет выполнять или не выполнять разрешение. Базовый функционал представлен в классе:
Если метод execute вернет true, то разрешение будет получено.
Для объектов в списке требуется отдельный метод выполнения правила, который формирует условие выборки объектов из хранилища (см. например UserRule).
На одно разрешение может быть назначено несколько правил. Если хотя бы одно не выполнится, то разрешение не будет применено.
Правила назначений
После внесения изменений в настройки безопасности необходимо перезапустить ее при помощи кнопки на верхней панели модуля «Администрирование». Но иногда требуется назначать роли динамически, во время выполнения приложения. Для этого служат правила назначений.
Если правило включено и проходит проверку, то роль, к которой привязано правило, будет назначена пользователю. Если у роли есть несколько правил, то она будет назначена при выполнении хотя бы одного из них.
Атрибуты правила назначения:
- Активно - флаг, отвечающий за включение правила.
- Кодовое имя - уникальный идентификатор правила.
- Конфигурация создания - параметры для создания объекта правила. Состоит из пути до JavaScript класса и дополнительных свойств, передаваемых через конструктор.
- Элементы - роли (разрешения), которые будут назначены после прохождения проверки правила. Ссылки на правила назначений также есть в объектах ролей.
Автоматическое назначение ролей работает только для идентифицированных пользователей.
Логика проверки реализуется в JavaScript классе, в методе execute. Рабочий пример можно найти в демо-приложении.
Метаданные
Метаданные описывают сущности приложения. Например, если вы создаете блог, то сущности - это статья, комментарий, категория (см. «Пишем блог на Evado фреймворк»). В метаданных статьи указано, что у ней есть атрибуты - заголовок, текст, дата публикации и т. п. Непосредственно сами статьи уже будут созданы на основе этих атрибутов во время эксплуатации приложения.
Разрешения метаданных
Доступ к метаданным определяется в модуле «Администрирование» в меню «Безопасность» - «Разрешения метаданных». В отличие от системных разрешений, разрешения метаданных описывают действия и цели, к которым они дают доступ.
- Тип - разрешающее или запрещающее действие. Запрещающие действия имеют приоритет над разрешающими.
- Действие - чтение, создание, изменение или удаление объекта. Можно выбрать несколько действий одновременно.
- Цели - метаданные сущностей, для которых будет применяться данное разрешение.
- Роли - роли, которые содержат данное разрешение.
- Правила - см. выше правила для разрешений.
Разрешения метаданных назначаются только ролям и не могут иметь вложенных разрешений.
По умолчанию доступ к метаданным запрещен. Исключением является навигация. Если у роли есть доступ к модулю «Офис», то пользователь увидит меню, но сами данные на страницах будут недоступны. Чтобы скрыть секцию или пункты меню, их нужно явно запретить в «Разрешениях метаданных».
Заключение
В большинстве приложений структура разрешений, ролей и правил безопасности изменяется достаточно редко. Она может быть описана в конфигурации приложения и устанавливаться вместе с ним.
Настройки безопасности, созданные через модуль «Администрирование», можно экспортированы в директорию с данными для сохранения в системе контроля версий.
Приложения, созданные на фреймворке Evado, легко развернуть через Docker практически на любом виртуальном сервере с минимальным тарифным планом. На сайте Evado можно найти ссылку на работающий онлайн пример приложения. Ниже представлены несколько готовых приложений доступных в публичных хранилищах:
- Веб-приложение «Блог»
- Веб-приложение «Система отслеживания ошибок»
- Веб-приложение «Дистанционное обучение»
- Веб-приложение «Социальная сеть»
- Веб-приложение «Система заказа такси»
- Веб-приложение «Аукцион»
- Веб-приложение «Книжный интернет-магазин»
- Веб-приложение «Экспертная система»
- Веб-приложение «Пекарня»