Управление доступом
В этом разделе рассказывается о том, как защитить данные от несанкционированного доступа.
#
Атрибуты доступаВ некоторых элементах, например, в кнопках <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-2.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>