Права доступа пользователей бекенда Webasyst

Содержание...

Права доступа могут быть заданы как для конкретного пользователя, так и для групп пользователей. Действующие в данный момент права доступа пользователя — это сочетание его личных прав и прав доступа всех групп, в которых он состоит.

Базовые права доступа

По умолчанию для любого приложения всегда работают следующие базовые права доступа:

Базовые права доступа работают на системном уровне и не требуют никаких действий от разработчика при создании приложения.

Расширенные права доступа

Для большинства бизнес-приложений, как правило, недостаточно системы базовых прав доступа. Часто требуется разграничивать права более детально: например, разрешить удаление сообщений в блоге только модераторам или редактировать описание товаров в определенном разделе каталога только сотрудникам соответствующего отдела.

Для того чтобы для приложения была доступна настройка расширенных прав доступа, необходимо объявить для него объекты права — перечень разделов и функций приложения, доступ к которым можно разрешать или ограничивать для отдельных пользователей или групп. Это делается следующим образом:

  1. В конфигурационном файле приложения wa-apps/{APP_ID}/lib/config/app.php добавьте следующую строку:

    'rights' => 1

    Такая запись означает, что для приложения имеется возможность настройки расширенных прав доступа (описанная в отдельном конфигурационном файле).

  2. Создайте конфигурационный файл расширенных прав доступа wa-apps/{APP_ID}/lib/config/{APP_ID}RightConfig.class.php и перечислите в нём доступные для настройки объекты права и возможные уровни доступа к ним.

Файл конфигурации прав доступа к приложению представляет собой класс, унаследованный от системного абстрактного класса waRightConfig. В унаследованном классе необходимо переопределить метод init. В методе init происходит добавление объекта права в систему проверки прав. Сигнатура основного метода добавления объектов права имеет следующий вид:

addItem($key, $title, $type, $params = array())

Пример содержимого конфигурационного файла настройки прав доступа к приложению:

<?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);
    }
}