Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

OSCAR

Глава 16 из книги "Архитектура приложений с открытым исходным кодом", том 2.

Оригинал: OSCAR
Автор: Jennifer Ruttan
Перевод: А.Панин

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

Проект CAISI (проект системы клиентского доступа к интегрированным службам и информации - Client Access to Integrated Services and Information) изначально был отдельным продуктом, созданным в результате форка системы OSCAR и предназначенным для управления заведениями для бездомных в Торонто. В конце концов было принято решение о переносе наработок проекта CAISI в форме кода в основную ветку исходного кода. Оригинальный проект CAISI мог больше не развиваться, но при этом из его состава была получена очень важная часть системы OSCAR: модель прав доступа.

Модель прав доступа системы OSCAR предельно мощна и может использоваться для создания такого большого количества ролей и наборов прав доступа, какое только возможно. Провайдеры (providers) принадлежат программам (programs) (в качестве обслуживающего персонала (staff)), в рамках которых они выступают в определенной роли (role). Каждая программа находится в учреждении (facility). Каждая роль имеет описание (например, "доктор", "медицинская сестра", "социальный работник", и.т.д.) и набор соответствующих глобальных прав доступа. Права доступа записываются в формате, облегчающем их понимание: "read nurse notes" ("читать записи медицинских сестер") может описывать права доступа, которые может иметь роль доктора, при этом роль медицинской сестры может не иметь прав доступа "read doctor notes" ("читать записи доктора").

Этот формат может быть простым для понимания, но при более подробном рассмотрении оказывается, что он требует немного сложной работы для проверки таких типов прав доступа. Название роли, в которой выступает рассматриваемый провайдер, проверяется по списку прав доступа путем поиска совпадения с действием, попытка выполнения которого предпринимается. Например, попытка провайдера прочитать записи доктора приведет к проверке права доступа "read doctor notes" для каждой из записей, созданных доктором.

Другой проблемой является преимущественное использование английского языка для описания прав доступа. Любой пользователь системы OSCAR, применяющий отличающийся от английского язык все еще должен описывать права доступа в формате, подобном следующему "read [роль] notes" с использованием таких английских слов, как "read", "write", "notes" и других.

Модель прав доступа системы CAISI является важной частью системы OSCAR, но она не является единственной доступной моделью. Перед тем, как была реализована система CAISI, разрабатывалась другая модель на основе ролей (но не на основе программ), которая и на сегодняшний день используется во многих частях системы.

В этой модели провайдеры ставятся в соответствие одной или нескольким ролям (например, "доктор", "медицинская сестра", "администратор" и другим). Они могут выступать в таком количестве ролей, в каком это необходимо - соответствующие ролям разрешения размещаются друг над другом в стеке. Эти права доступа главным образом используются для запрета доступа к частям системы в отличие от прав доступа системы CAISI, которые запрещают доступ к определенным наборам данных из карты пациента. Например, пользователю необходимо иметь право доступа "_admin" "read" в рамках используемой роли для того, чтобы иметь возможность доступа к панели администрирования. Однако, право доступа "read" лишит пользователей возможности выполнения административных задач. Для выполнения этих задач ему потребуется также право доступа "write".

Обе эти системы предназначены для выполнения практически одной и той же задачи; из-за более поздней интеграции кода системы CAISI в ходе жизненного цикла проекта рассматриваемые системы существуют параллельно. Данные системы не всегда успешно соседствуют друг с другом, поэтому в реальности гораздо проще сфокусироваться на использовании одной из них для повседневной эксплуатации системы OSCAR. В общем случае вы можете оценить возраст кода системы OSCAR, зная о том, какие модели прав доступа предшествовали другим моделям: модель на основе типов провайдеров (Provider Type), модель на основе ролей провайдеров (Provider Roles), модель на основе программ и провайдеров системы CAISI (CAISI Programs/Roles).

Старейшим типом модели прав доступа является модель на основе типов провайдеров ("Provider Type"), которая настолько устарела, что сегодня не используется в большинстве частей системы и фактически использует исключительно роль "доктор" в ходе создания нового провайдера, так как использование любой другой роли (такой, как "регистратор") приводит к проблемам во всей системе. Управление правами доступа при использовании модели на основе ролей провайдера (Provider Roles) вместо описанной выше может осуществляться проще и точнее.


Далее: Интегратор