Архитектура права доступа

Материал из wiki.sibvaleo.com

Перейти к: навигация, поиск

Содержание

Общее описание

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

Объекты хранения
  • users - представление, ссылающееся на справочник сотрудников компании (test.cp_emp).
  • roles - роли, для объединения пользователей в группы. Есть роли с автоматически назначаемым содержимым - это менеджеры ЦОКов (92 менеджеры из test.cp_cok_info) и УПС по по стране (41 УПС по таблице test.sc_emp_country).
  • resource_types - вид ресурса. Ресурс - это любой объект, к которому можно выдать право на доступ.
  • access_types - все возможные действия над ресурсами.
  • resource_type_accesses - действия, возможные над конкретным видом ресурса.
  • accesses - собственно права доступа, выдаваемые роли либо пользователю.
  • accesses_log - журнал изменения прав, для возможных разбирательств.


Заведение ресурса для выдачи к нему доступа

Последовательность действий такова
  • Создать справочник ресурсов к которым выдаем доступ - в своей схеме и таблице. Если первичный ключ у этого справочника - не одно числовое поле, то таковое поле надо завести и прописать его заполнение из последовательности (sequence). Еще желательно добавить на него ограничение уникальности. Именно на это поле и будут ссылаться права доступа.
    • Наряду с числовым идентификатором можно использовать и строковый, тогда его надо вывести в полях code представлений v_all_resources и своего ресурса (подробнее о них чуть ниже).
  • Завести тип ресурса (добавить запись в таблицу resource_types).
  • Указать на какие действия с ресурсом можно выдавать доступ - добавить записи в таблицу resource_type_accesses.
  • Создать view в схеме acl, указывающую на ресурсы по аналогии с v_res_rep_report, с типом = resource_types.code.
  • Добавить ссылку на эту view в общей view ресурсов acl.v_all_resources (дополнить текст view запросом к своему виду ресурсов).

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

Для авторизации, как правило в начале каждой сессии, используется процедура pacl.authorize. Параметры для нее - логин и пароль с корпоративного портала. После авторизации из любого запроса или процедуры доступны id текущего пользователя - pacl.get_current_user и его права доступа (ресурсы и действия, к которым он имеет доступ напрямую или через роль).

Для проверки прав созданы объекты
  • v_cu_access - view со всеми доступными текущему пользователю ресурсами. Можно фильтровать по нужному виду ресурса.
  • pacl.cu_can_access - функция для проверки доступа к конкретному ресурсу. Параметр i_resource_code можно игнорировать.

Если авторизация не используется, то можно использовать проверки по id пользователя - v_access, pacl.can_access.

Как настроить выдачу прав сотрудником не из ДИТ

Назовем проект, к которому нужно выдавать доступ, проект. Назовем сотрудника (не из ДИТ), который будет выдавать доступ к этому проекту - куратор проекта.

Обязанности ведущего программиста проекта
  • Создать ресурсы.
  • Создать действия над ресурсами.
  • Обсудить с куратором проекта и создать роли в проекте.
  • Наполнить роли ресурсами (например, в программе UkRunner из папки \\samba\data\).
  • Создать роль "Проект. Выдача прав доступа".
  • Добавить в ресурсы роли "Проект. Выдача прав доступа" все роли этого проекта (вид ресурса - "Роли").
  • Добавить в роль "Проект. Выдача прав доступа" куратора проектa.
  • Добавить в роль "Выдача прав доступа" (не по проекту, а общую) куратора проекта.

После этого как в программах УК, Корпоративное планирование, так и на корпоративном портале куратор проекта сможет добавлять и удалять в роли проекта любых (не связанных с его отделом) сотрудников. При появлении новых ролей или разделении существующих на части достаточно добавить новую роль как ресурс к роли "проект. Выдача прав доступа".

Обязанности куратора проекта
  • Обсудить с программистом проекта разделение функций проекта на роли.
  • Включать и выключать из ролей проекта сотрудников.
  • При необходимости инициировать обсуждение необходимости изменений в распределении ресурсов проекта по ролям.


Дополнительно

Для прав доступа полностью работает механизм назначения заместителей на портале. Если Вася назначил Петю заместитетм, все права Васи будут выданы Пете на время замещения. Для копирования прав доступа сотрудника можно использовать процедуру pacl.copy_user_rights, но лучше, конечно, регулировать доступ через включение сотрудника в нужные роли.

При показе отчета из программы reporter или такого же отчета на портале авторизация проводится автоматически, поэтому в этих отчетах можно свободно пользоваться проверками прав доступа - v_cu_access и pacl.cu_can_access.

Просмотры
Личные инструменты