Разработка:storages/acl — различия между версиями

Материал из DOF
Перейти к: навигация, поиск
(Перехватываемые события)
 
(не показано 10 промежуточных версий 5 участников)
Строка 3: Строка 3:
 
| type = storages
 
| type = storages
 
}}
 
}}
 +
 +
===Кеширование===
 +
Права кешируются на уровне сесси пользователя.
 +
Если какие-то права были добавлены, но кеш не сбросился, то необходимо перезайти в систему для сброса сессии и обновления кеш хранилища.
  
 
===Таблица в базе данных===
 
===Таблица в базе данных===
''acl'' - справочник полномочий.
+
''acl'' - справочник полномочий. Подробные правила работы с полномочиями описаны в разделе: [[Разработка:Управление_доступом | Управление доступом]].
  
 
====Подробный формат полей в таблице:====
 
====Подробный формат полей в таблице:====
Строка 14: Строка 18:
 
* objectid - id объекта к которому дается доступ (или 0 если доступ дается ко всем объектам)
 
* objectid - id объекта к которому дается доступ (или 0 если доступ дается ко всем объектам)
 
* aclwarrantid - id записи из таблица [[Разработка:storages/aclwarrants | aclwarrants ]]
 
* aclwarrantid - id записи из таблица [[Разработка:storages/aclwarrants | aclwarrants ]]
===Стандартные права доступа для хранилищ и рабочих процессов===
 
  
 +
==== Стандартные полномочия для хранилищ и рабочих процессов ====
 
В каждом плагине storage для определения уровня доступа к объекту следует использовать стандартные обозначения:
 
В каждом плагине storage для определения уровня доступа к объекту следует использовать стандартные обозначения:
  
Строка 26: Строка 30:
 
* edit:имя_поля - право редактировать отдельное поле
 
* edit:имя_поля - право редактировать отдельное поле
 
* view:имя_поля - право просматривать отдельное поле
 
* view:имя_поля - право просматривать отдельное поле
 +
* changestatus - вообще изменять статус (с любого на любой)
 
* changestatus:from:статус - изменять статус с указанного
 
* changestatus:from:статус - изменять статус с указанного
 
* changestatus:to:статус - изменять статус на указанный
 
* changestatus:to:статус - изменять статус на указанный
* changestatus:all - вообще изменять статус
 
 
В плагинах типа im и modlib следует для проверки стандартных прав доступа обращаться к плагинам storage.
 
 
=== Работа с правами ===
 
  
==== Имена плагинов ====
 
Все плагины, отвечающие за работу с полномочиями должны иметь префикс acl. Все функции, которые предоставляют список прав также должны иметь этот префикс.
 
  
==== Добавление полномочий в плагин ====
+
Также при создании права можно указать отношение, которое указанный пользователь имеет к объекту, на который назначены права.
Название функции, в которой хранится список прав для плагина - acldefault(). Каждый плагин, который предоставляет собственные полномочия должен реализовывать (implements) интерфейс dof_storage_aclcapabilities_interface.
+
Отношение указывается через прямой слеш "/".  
  
==== Взаимодействие с другими плагинами ====
+
Примеры:
Общее правило такое: другие плагины могут зависеть от плагинов прав доступа, а плагины прав доступа не могут зависеть от остальных плагинов.
+
* 'edit/owner' - право редактировать объект для владельца.
Каждая должность (position) должна сопоставляться с с доверенностью (warrant).
+
* 'changestatus:all/owner' - право на любое изменение статуса для владельца объекта
Каждое назначение на должность (appointment) должно сопоставляться с одним или несколькими применениями доверенностей (aclwarrantagents)
 
  
При добавлении новой записи в таблицу appointments в таблице warrantagents создается запись с данными из записи appointments и полем capabilityid=0. Количество записей с capabilityid=0 всегда соответствует количеству активных назначений на должность.
+
===События===
 +
В этом разделе описан список всех событий, которые генерируются, перехватываются и обрабатываются этим плагином.
  
При установке плагина aclwarrants система автоматически создает мандаты для всех типов базовых ролей, которые мы поддерживаем. При установке, обновлении и удалении плагинов эти мандаты автоматически обновляются. Пользователям базовые роли не назначаются.
+
====Перехватываемые события====
 +
{| border="1"
 +
|+ Таблица событий, которые перехватывает этот плагин
 +
! Тип плагина
 +
! Код плагина
 +
! Код события
 +
! Доп. данные
 +
! Пояснение
 +
|-
 +
| acl
 +
| storage
 +
| insert
 +
|
 +
| Сбрасывается кеш хранилище прав
 +
|-
 +
| acl
 +
| storage
 +
| delete
 +
|
 +
| Сбрасывается кеш хранилище прав
 +
|}
  
При создании новой должности мы можем создать для нее доверенность (отдельная форма в плагине positions). При создании мандата для должности мы можем указать одну из стандартных ролей, тогда мандат роли автоматически унаследует все полномочия из мандата этой роли (и будет автоматически обновляться вместе с ней). При назначении на должность мы делаем привязку персоны к мандату, который привязан к назначеемой должности с указанием подразделения и сроков действия (если они есть).
+
====Генерируемые события====
 +
-
  
Права, которые пользователь получает при назначении на должность, указываются как записи в таблице aclwarrantagents, с указанием id мандата, departmentid=0 и personid=0.
 
  
 
===Дополнительные методы:===
 
===Дополнительные методы:===
  
 +
===='''get_persons_acl_by_code($plugintype, $plugincode, $aclcode, $departmentid = 0, $objectid = 0)'''====
  
 +
Получить список персон имеющих указанное полномочие
  
 +
''Аргументы:''
 +
* int $plugintype - тип плагина деканата
 +
* int $plugincode - код плагина деканата
 +
* int $aclcode - код права
 +
* int $departmentid - id подразделения
 +
* int $objectid - id объекта
 +
''Возвращает значение:''
 +
* array|false - массив записей из БД, содержащих идентификатор пользователя и подразделения или false в случае ошибки
  
  
 
+
[[Категория:Управление доступом]]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
[[Категория:Разработка]]
 
[[Категория:Плагины_storages]]
 

Текущая версия на 10:51, 2 марта 2018

Плагин
Название 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 - вообще изменять статус (с любого на любой)
  • changestatus:from:статус - изменять статус с указанного
  • changestatus:to:статус - изменять статус на указанный


Также при создании права можно указать отношение, которое указанный пользователь имеет к объекту, на который назначены права. Отношение указывается через прямой слеш "/".

Примеры:

  • 'edit/owner' - право редактировать объект для владельца.
  • 'changestatus:all/owner' - право на любое изменение статуса для владельца объекта

События

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

Перехватываемые события

Таблица событий, которые перехватывает этот плагин
Тип плагина Код плагина Код события Доп. данные Пояснение
acl storage insert Сбрасывается кеш хранилище прав
acl storage delete Сбрасывается кеш хранилище прав

Генерируемые события

-


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

get_persons_acl_by_code($plugintype, $plugincode, $aclcode, $departmentid = 0, $objectid = 0)

Получить список персон имеющих указанное полномочие

Аргументы:

  • int $plugintype - тип плагина деканата
  • int $plugincode - код плагина деканата
  • int $aclcode - код права
  • int $departmentid - id подразделения
  • int $objectid - id объекта

Возвращает значение:

  • array|false - массив записей из БД, содержащих идентификатор пользователя и подразделения или false в случае ошибки