webasyst alpha

  • Фреймворк
  • Приложения
  • Помощь
  • Блог
  • Скачать
  • Демо
  • Возможности
  • Лицензия
  • Документация Webasyst
    • Введение
    • Установка
    • Создание сайта
      • Пример: создание сайта
      • Сайты и маршрутизация
      • Шаблоны и темы оформления
      • Страницы и общие блоки
    • Разработка приложений
      • Пример: приложение «Гостевая книга»
      • Приложение-пустышка
      • Файловая структура
      • Конфигурационные файлы
      • Шаблоны
      • Интерфейс
      • База данных
      • Правила и рекомендации по именованию
      • Маршрутизация в бекенде
      • Маршрутизация во фронтенде
      • Экшены и контроллеры
      • Композитные макеты
      • Права доступа
      • AJAX
      • Переменные окружения
      • Сессии
      • Локализация
      • Мобильная версия
      • Работа с почтой
      • Работа с изображениями
      • Загрузка файлов на сервер
      • Журнал действий пользователя
      • Интеграция с приложением «Сайт»
      • Интеграция с приложением «Контакты»
      • Действия по расписанию
      • Адаптеры авторизации
      • Плагины
    • Настройки сервера
      • Nginx + FastCGI
      • Настройка Cron

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

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

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

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

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

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

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

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

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

  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())
  • $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);
  }
}
  • О компании
  • Фреймворк и WebAsyst.ru
    • Language
      • Русский
      • English

© 2011 Webasyst