Управление доступом
В этом разделе рассказывается о том, как защитить данные от несанкционированного доступа.
Атрибуты доступа
В некоторых элементах, например, в кнопках <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
задаёт право выполнять указанные операции объекта.
Если указан знак *
(звёздочка), позволяется выполнять любые операции.
Если есть право на выполнение операций объекта, то на чтение объекта доступ даётся автоматически.
Фильтрация доступа к объекту
Точка доступа <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>