Разработка:storages/acl — различия между версиями
Dido86 (обсуждение | вклад) м (переименовал «Разработка:storages/aclcapabilities» в «Разработка:storages/acl»: в связи с ТЗ) |
Dido86 (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
{{Infobox_Plugin | {{Infobox_Plugin | ||
− | | name = | + | | name = acl |
| type = storages | | type = storages | ||
}} | }} | ||
===Таблица в базе данных=== | ===Таблица в базе данных=== | ||
− | '' | + | ''acl'' - справочник полномочий. |
====Подробный формат полей в таблице:==== | ====Подробный формат полей в таблице:==== | ||
Строка 13: | Строка 13: | ||
* plugincode - код плагина | * plugincode - код плагина | ||
* objectid - id объекта к которому дается доступ (или 0 если доступ дается ко всем объектам) | * objectid - id объекта к которому дается доступ (или 0 если доступ дается ко всем объектам) | ||
+ | * aclwarrantid - id записи из таблица [[Разработка:storages/aclwarrants | aclwarrants ]] | ||
===Стандартные права доступа для хранилищ и рабочих процессов=== | ===Стандартные права доступа для хранилищ и рабочих процессов=== | ||
Версия 10:21, 13 апреля 2011
Плагин | |
Название | 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_aclcapabilities_interface.
Взаимодействие с другими плагинами
Общее правило такое: другие плагины могут зависеть от плагинов прав доступа, а плагины прав доступа не могут зависеть от остальных плагинов. Каждая должность (position) должна сопоставляться с с доверенностью (warrant). Каждое назначение на должность (appointment) должно сопоставляться с одним или несколькими применениями доверенностей (aclwarrantagents)
При добавлении новой записи в таблицу appointments в таблице warrantagents создается запись с данными из записи appointments и полем capabilityid=0. Количество записей с capabilityid=0 всегда соответствует количеству активных назначений на должность.
При установке плагина aclwarrants система автоматически создает мандаты для всех типов базовых ролей, которые мы поддерживаем. При установке, обновлении и удалении плагинов эти мандаты автоматически обновляются. Пользователям базовые роли не назначаются.
При создании новой должности мы можем создать для нее доверенность (отдельная форма в плагине positions). При создании мандата для должности мы можем указать одну из стандартных ролей, тогда мандат роли автоматически унаследует все полномочия из мандата этой роли (и будет автоматически обновляться вместе с ней). При назначении на должность мы делаем привязку персоны к мандату, который привязан к назначеемой должности с указанием подразделения и сроков действия (если они есть).
Права, которые пользователь получает при назначении на должность, указываются как записи в таблице aclwarrantagents, с указанием id мандата, departmentid=0 и personid=0.