Права доступа могут быть заданы как для конкретного пользователя, так и для групп пользователей. Действующие в данный момент права доступа пользователя — это сочетание его личных прав и прав доступа всех групп, в которых он состоит.
Базовые права доступа
По умолчанию для любого приложения всегда работают следующие базовые права доступа:
- есть полный доступ к приложению
- нет доступа к приложению
Базовые права доступа работают на системном уровне и не требуют никаких действий от разработчика при создании приложения.
Расширенные права доступа
Для большинства бизнес-приложений, как правило, недостаточно системы базовых прав доступа. Часто требуется разграничивать права более детально: например, разрешить удаление сообщений в блоге только модераторам или редактировать описание товаров в определенном разделе каталога только сотрудникам соответствующего отдела.
Для того чтобы для приложения была доступна настройка расширенных прав доступа, необходимо объявить для него объекты права — перечень разделов и функций приложения, доступ к которым можно разрешать или ограничивать для отдельных пользователей или групп. Это делается следующим образом:
-
В конфигурационном файле приложения
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);
}
}









