Права доступа могут быть заданы как для конкретного пользователя, так и для групп пользователей. Действующие в данный момент права доступа пользователя — это сочетание его личных прав и прав доступа всех групп, в которых он состоит.
Базовые права доступа
По умолчанию для любого приложения всегда работают следующие базовые права доступа:
- есть полный доступ к приложению
- нет доступа к приложению
Базовые права доступа работают на системном уровне и не требуют никаких действий от разработчика при создании приложения.
Расширенные права доступа
Для большинства бизнес-приложений, как правило, недостаточно системы базовых прав доступа. Часто требуется разграничивать права более детально: например, разрешить удаление сообщений в блоге только модераторам или редактировать описание товаров в определенном разделе каталога только сотрудникам соответствующего отдела.
Для того чтобы для приложения была доступна настройка расширенных прав доступа, необходимо объявить для него объекты права — перечень разделов и функций приложения, доступ к которым можно разрешать или ограничивать для отдельных пользователей или групп. Это делается следующим образом:
-
В конфигурационном файле приложения
wa-apps/[app_id]/lib/config/app.php
добавьте следующую строку:'rights' => 1
Такая запись означает, что для приложения имеется возможность настройки расширенных прав доступа (описанная в отдельном конфигурационном файле).
-
Создайте конфигурационный файл расширенных прав доступа
wa-apps/[app_id]/lib/config/[app_id]RightConfig.class.php
и перечислите в нём доступные для настройки объекты права и возможные уровни доступа к ним.
Файл конфигурации прав доступа к приложению представляет собой класс, унаследованный от системного
абстрактного класса waRightConfig
. В унаследованном классе необходимо переопределить метод init
. В методе init
происходит добавление объекта права в систему проверки прав.
Сигнатура основного метода добавления объектов права имеет следующий вид:
addItem($key, $title, $type, $params = [])
$key
— строковый ключ объекта права$title
— название объекта права$type
— тип элемента настройки прав доступа (например,checkbox
,list
и т. д.)$params
— различные дополнительные параметры (для каждого значения$type
используется индивидуальный набор параметров)
Пример содержимого конфигурационного файла настройки прав доступа к приложению:
<?php class testRightConfig extends waRightConfig { public function init() { // Два простейших права $this->addItem('add', 'Право добавлять', 'checkbox'); $this->addItem('edit', 'Право редактировать', 'checkbox'); // Допустим, у нас есть список категорий, // к которым нужно иметь возможность настраивать права доступа: $categories = [ 1 => 'Категория 1', 2 => 'Категория 2', // ... ]; $this->addItem('category', 'Категории', 'list', ['items' => $categories]); // В данном случае ключом является "category.$category_id" } }
Для тестирования достаточно попробовать настроить для любого пользователя права доступа к вашему приложению.
Обеспечение расширенных прав доступа в логике приложения
Системные механизмы расширенных прав обеспечивают механизм хранения, чтения и управления информацией о правах доступа. Однако непосредственная реализация разграничения прав является частью бизнес-логики конкретного приложения.
Следующая конструкция в PHP-коде контроллера возвращает true
, если у текущего пользователя есть запрашиваемое
право, и false
— в противном случае:
$this->getRights('add')
Пример использования права на удаление (например, записи в базе данных) в логике приложения:
if ($this->getRights('delete')) { // получаем id удаляемой записи $id = waRequest::get('id', 0, 'int'); if ($id) { // удаляем запись из таблицы $model = new guestbookModel(); $model->deleteById($id); } }