Права доступа

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

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

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

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

  • есть полный доступ к приложению
  • нет доступа к приложению

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

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

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

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

  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 = [])
  • $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);
      }
  }