Разработка:storages/acl

Материал из DOF
Перейти к: навигация, поиск
Плагин
Название acl
Тип storages


Таблица в базе данных

acl - справочник полномочий.

Подробный формат полей в таблице:

  • id - номер записи
  • code - код полномочия (текстовое, необязательное, при указании кода проверяется уникальность)
  • plugintype - тип плагина (im, storage, workflow, sync, modlib)
  • plugincode - код плагина
  • objectid - id объекта к которому дается доступ (или 0 если доступ дается ко всем объектам)
  • aclwarrantid - id записи из таблица aclwarrants

Стандартные права доступа для хранилищ и рабочих процессов

В каждом плагине storage для определения уровня доступа к объекту следует использовать стандартные обозначения:

  • view - право просматривать объект из таблицы
  • edit - право редактировать объект из таблицы
  • create - право создавать новый объект в таблице
  • delete - право удалять объект из таблицы
  • viewbase - право просматривать сокращенную информацию по объекту (например при просмотре списка записей)
  • viewextended - право просматривать расширенную информацию по объекту (все поля)
  • edit:имя_поля - право редактировать отдельное поле
  • view:имя_поля - право просматривать отдельное поле
  • changestatus:from:статус - изменять статус с указанного
  • changestatus:to:статус - изменять статус на указанный
  • changestatus:all - вообще изменять статус

В плагинах типа im и modlib следует для проверки стандартных прав доступа обращаться к плагинам storage.

Работа с правами

Имена плагинов

Все плагины, отвечающие за работу с полномочиями должны иметь префикс acl. Все функции, которые предоставляют список прав также должны иметь этот префикс.

Добавление полномочий в плагин

Название функции, в которой хранится список прав для плагина - acldefault(). Каждый плагин, который предоставляет собственные полномочия должен реализовывать (implements) интерфейс dof_storage_acl_interface.

Взаимодействие с другими плагинами

Общее правило такое: другие плагины могут зависеть от плагинов прав доступа, а плагины прав доступа не могут зависеть от остальных плагинов. Каждая должность (position) должна сопоставляться с с доверенностью (warrant). Каждое назначение на должность (appointment) должно сопоставляться с одним или несколькими применениями доверенностей (aclwarrantagents)

При добавлении новой записи в таблицу appointments в таблице warrantagents создается запись с данными из записи appointments и полем aclid=0. Количество записей с aclid=0 всегда соответствует количеству активных назначений на должность.

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

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

Права, которые пользователь получает при назначении на должность, указываются как записи в таблице aclwarrantagents, с указанием id мандата, departmentid=0 и personid=0.

Дополнительные методы: