Права доступа могут быть заданы как для конкретного пользователя, так и для групп пользователей. Действующие в данный момент права доступа пользователя — это сочетание его личных прав и прав доступа всех групп, в которых он состоит.
По умолчанию для любого приложения всегда работают следующие базовые права доступа:
Базовые права доступа работают на системном уровне и не требуют никаких действий от разработчика при создании приложения.
Для большинства бизнес-приложений, как правило, недостаточно системы базовых прав доступа. Часто требуется разграничивать права более детально: например, разрешить удаление сообщений в блоге только модераторам или редактировать описание товаров в определенном разделе каталога только сотрудникам соответствующего отдела.
Для того чтобы для приложения была доступна настройка расширенных прав доступа, необходимо
объявить для него объекты права — перечень разделов и функций приложения, доступ к которым можно разрешать или ограничивать
для отдельных пользователей или групп. Это делается следующим образом:
В конфигурационном файле приложения 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 = array())
$key — строковый ключ объекта права$title — название объекта права$type — тип элемента настройки прав доступа (например, checkbox, list и т. д.)$params — различные дополнительные параметры (для каждого значения $type используется индивидуальный набор параметров)Пример содержимого конфигурационного файла настройки прав доступа к приложению:
<?php
class testRightConfig extends waRightConfig
{
public function init() {
// Два простейших права
$this->addItem('add', 'Право добавлять', 'checkbox');
$this->addItem('edit', 'Право редактировать', 'checkbox');
// Допустим, у нас есть список категорий,
// к которым нужно иметь возможность настраивать права доступа:
$categories = array(
1 => 'Категория 1',
2 => 'Категория 2',
// ...
);
$this->addItem('category', 'Категории', 'list', array('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);
}
}