Skip to main content

Управление доступом

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

Атрибуты доступа#

В некоторых элементах, например, в кнопках <button> или навигации, можно напрямую определить ограничения доступа с помощью специальных атрибутов:

Атрибуты доступа

НаименованиеОписание
authenticatedДоступ только для аутентифицированных пользователей
anonymousДоступ только для анонимных пользователей
rolesДоступ пользователям с перечисленными ролями
permissionsДоступ пользователям с перечисленными правами
usernamesДоступ только перечисленным пользователям
permit-allДоступ разрешен для всех
deniedДоступ запрещен для всех

Атрибуты доступа подключается дополнительной xsd схемой: http://n2oapp.net/framework/config/schema/security-1.0.

Ограничение доступа к кнопке с помощью атрибутов
<page xmlns="http://n2oapp.net/framework/config/schema/page-3.0"  xmlns:sec="http://n2oapp.net/framework/config/schema/security-1.0">  ...  <button sec:authenticated="true"/>  ...</page>
Ограничение доступа к странице с помощью атрибутов
<application xmlns="http://n2oapp.net/framework/config/schema/application-1.0"             xmlns:sec="http://n2oapp.net/framework/config/schema/security-1.0">    <header class="inverse" title="N2O">      ...      <page sec:roles="admin, user"/>      ...    </header></application>

При нехватке прав доступа визуальный компонент будет скрыт. Проверки доступа действуют и на сервере. При попытке несанкционированного доступа сервер выдаст ошибку 401 или 403.

Права доступа вычисляются по свойству user в контексте пользователя.

Контекст пользователя
{  "user" : {    "username" : "Joe",    "roles" : ["admin"],    "permissions" : ["something.edit", "something.read"]  }}

Схема доступа#

С помощью схемы доступа можно управлять доступом, выставляя правила не для каждого компонента, а над объектной моделью данных.

Схема доступа записывается в отдельном файле [id].access.xml.

Ограничение доступа к странице с помощью атрибутов
<access xmlns="http://n2oapp.net/framework/config/schema/access-2.0">  <role id="admin">    <object-access      object-id="something"      operations="*"/>  </role></access>

Идентификатор схемы доступа определяется настройкой n2o.access.id.

В схеме описываются права пользователя с привязкой к точкам доступа.

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

Точки доступа

НаименованиеОписание
<object-access>Доступ к объекту и операциям
<object-filters>Фильтрация доступа к объекту
<url-access>Доступ к ссылке
<page-access>Доступ к странице

Доступ к объекту#

С помощью точки доступа к объекту <object-access> можно защитить компоненты, связанные с объектом или с операцией объекта. Например, можно скрыть кнопку с действием <invoke>, если объект или операция кнопки недоступны пользователю.

Права доступа к объекту
<authenticated>  <object-access object-id="person"/></authenticated>

Атрибут object-id задаёт права доступа на чтение объекта.

Атрибут operations задаёт право выполнять указанные операции объекта. Если указан знак * (звёздочка), позволяется выполнять любые операции.

Если есть право на выполнение операций объекта, то на чтение объекта доступ даётся автоматически.

Фильтрация доступа к объекту#

Точка доступа <object-filters> задаёт фильтрацию объекта. Фильтры будут действовать на объект, доступ к которому уже дан с помощью <object-access>.

Фильтры доступа к объекту
<permit-all>  <object-filters object-id="contract">    <!-- Доступны договоры только созданные мной -->    <eq id="onlyMyself"      field-id="creator" value="#{username}"/>    <!-- Доступны договоры моей организации -->    <eq id="onlyMyOrg"      field-id="org" value="#{orgId}"/>  </object-filters></permit-all>

Фильтрам можно задать идентификатор id. Идентификатор используется в атрибуте remove-filters в <object-access>. С помощью remove-filters можно удалить один или несколько фильтров у объекта, чтобы пользователю с определенными правами получить больше данных.

Удаление фильтров доступа
<permission id="MyContracts">  <!-- Действует фильтр onlyMyself и onlyMyOrg -->  <object-access object-id="contract"/></permission><permission id="MyOrgContracts">  <!-- Действует фильтр onlyMyOrg -->  <object-access object-id="contract" remove-filters="onlyMyself"/></permission>

Доступ к ссылке#

С помощью точки доступа к ссылке <url-access> можно защитить компоненты, связанные с определенной ссылкой. Например, можно скрыть кнопку с действием <a>, если её url или часть url недоступна пользователю.

Правила доступа к ссылке
<authenticated>  <url-access url-pattern="/persons/*"/></authenticated>

Доступ к странице#

Точка доступа к странице позволяет ограничить доступ к страницам, и кнопкам, открывающим страницы.

Правила доступа к ссылке
<authenticated>  <page-access page-id="persons"/></authenticated>