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-4.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-3.0"
xmlns:sec="http://n2oapp.net/framework/config/schema/security-1.0">
<header class="inverse" title="N2O">
...
<menu-item 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 задаёт право выполнять указанные операции объекта. Если указан знак * (звёздочка), позволяется выполнять любые операции.

note

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

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

Точка доступа <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>