Мета безопасности¶
Description¶
Мета безопасности - регулирует настройку прав безопасности на объекты системы. Можно разделить на статическую и динамическую безопасность:
Статическая безопасность - регулирует права доступа на объекты системы для определенной роли.
Динамическая безопасность - регулирует права доступа на объекты системы для конкретной персоны, в соответствии с какими-либо условиями, в то время как групповая динамическая безопасность - это права для группы безопасности.
Настройка динамической безопасности производится в файле deploy.json
, а также в файле acl/resources-and-roles.yml
. Статическая безопасность задается только в файле acl/resources-and-roles.yml
.
Правила формирования идентификаторов ресурсов¶
- узел навигации -
n:::namespace@code
- класс -
c:::classname@namespace
- объект -
i:::classname@namespace@id
- атрибут -
a:::classname@namespace.propertyname
- геомета:
- узел навигации: geonav:::код узла@namespace
- слой: geolayer:::код слоя@namespace
- данные: geodata:::код слоя@namespace@индекс запроса
- пути (модулей):
- модуль portal:
sys:::url:portal/*
- модуль geomap:
sys:::url:geomap/*
- модуль portal:
Типы прав¶
Чтение read
¶
read
- это право на просмотр информации по объектам класса. Задает разрешение просматривать объекты класса только для чтения и запрещает их создание/редактирование.
- id: Users
name: Обычные пользователи
permissions:
n:::ns@navigationName:
- read
...
Запись write
¶
write
- это право на создание объектов класса. Задает разрешение на создание новых объектов класса, но запрещает редактирование существующих.
- id: Users
name: Обычные пользователи
permissions:
n:::ns@navigationName:
- write
...
Использование use
¶
use
- это право на создание объектов класса. Задает разрешение на создание объектов класса, и использование объектов класса в ссылках и коллекциях.
Без use
- ссылки тоже отображаются в коллекции. Если есть read
, но нет use
, то нельзя выбрать объект и поместить его в коллекцию.
- id: Users
name: Обычные пользователи
permissions:
n:::ns@navigationName:
- use
...
Удаление delete
¶
delete
- это право на удаление объектов класса.
Полный доступ full
¶
full
- это право на полный доступ к объектам класса.
Динамическая безопасность¶
"PROJECT_BENEFITIAR": {
"resource":
{ "id": "pm::project" }
,
"attribute": "stakeholders.id"
}
Если у проекта в stakeholders.id
есть значение ассоциированное с текущим пользователем (настроено подтягивание организации как глобальной роли пользователя), то стоит учитывать текущего пользователя PROJECT_BENEFITIAR
и проверить права на ресурс pm:project
- эти права и будут правами на проект.
pm:project
- это некий виртуальный ресурс безопасности. Необходимо абстрагировать настройки доступа от проверяемого объекта
для разных ролей, можно разные ресурсы указать на один класс и наоборот.
Если ресурс не указать, то будут проверяться права на класс объекта. Тогда эту роль можно использовать как статическую, то есть выдавать статические права динамически.
Групповая динамическая безопасность¶
"roleMap": {
"organization@project-management": {
"ORGANIZATION_STAFF": {
"caption": "Сотрудник организации",
"resource": {
"id": "pm::organization",
"caption": "Организация"
},
"sids": [ // применять роль, если:
"$employee", // в атрибуте employee связанное с user значение (user это сотрудник)
// ИЛИ
"admin", // user это admin (здесь роль, учетная запись или идентификаторы связанные с user)
// ИЛИ
[
"$boss", // в атрибуте $boss связанное с user значение (user это руководитель)
// И
"supervisor" // user это supervisor (роль или учетная запись)
]
],
"conditions": {"eq": ["$state", "active"]}, // применять роль только для активных организаций
"attribute": "employee.id", // добавляется к sids
}
}
}
При указании sids
каждый уровень вложенности массивов значений меняет вид операции И
/ИЛИ
. На первом уровне применяется ИЛИ
.
Определение ролей пользователя¶
- Регистрируем пользователя с полным административным доступом -
admin
. - Под
admin
вregistry
в разделе Безопасность.Подразделения заводим иерархию подразделений (код подразделения = идентификатор безопасности). - Регистрируем пользователя без прав -
user
. - Под админ в
registry
в разделе Безопасность.Сотрудники заводим Сотрудника, указываем у него в атрибуте Пользователь пользователя без прав. Привязываем сотрудника к самому нижестоящему подразделению. - Заходим под
user
- прав нет ни на что. - Заходим под
admin
и даем роли (соответствующей самому вышестоящему подразделению) права на произвольные классы и узлы навигации. - Заходим под
user
- есть доступ к объектам, к которым есть доступ у подразделения. - Аналогично проверяем применение разрешений по всей иерархии подразделений.
Пример настройки в deploy.json
¶
"actualAclProvider":{
"module": "core/impl/access/aclmongo",
"initMethod": "init",
"initLevel": 1,
"options":{
"dataSource": "ion://Db"
}
},
"roleAccessManager": {
"module": "core/impl/access/amAccessManager",
"initMethod": "init",
"initLevel": 1,
"options": {
"dataSource": "ion://Db"
}
},
"aclProvider": {
"module": "core/impl/access/aclMetaMap",
"options":{
"dataRepo": "ion://dataRepo",
"acl": "ion://actualAclProvider",
"accessManager": "ion://roleAccessManager",
"map": {
"employee@develop-and-test": {
"isEntry": true,
"sidAttribute": "uid",
"jumps": ["department"]
},
"department@develop-and-test": {
"sidAttribute": "code",
"jumps": ["superior"]
}
}
}
}
Модель отображения атрибутов и объектов в соответствии с заданными правами¶
Есть класс [Проекты], в нем содержится атрибут с типом “Коллекция” - [Мероприятия]. Если для класса [Мероприятия] нет прав на чтение, то атрибут этого класса не показывается на форме класса [Проекты].
Если для класса есть динамическая безопасность - то независимо есть или нет права на чтение класса [Мероприятия] - атрибут на форме класса [Проекты] будет показан, но сами объекты мероприятий будут показаны только если на них есть права.
NB: Для отображения атрибута и объектов необходимо задавать как статическую, так и динамическую безопасность на класс по ссылке атрибута.
Если есть статическое право на чтение на класс, то пользователь увидит все объекты этого класса вне зависимости от динамических прав, и дополнительно будет делаться выборка объектов, на которые настроена динамическая безопасность и они будут отображаться для пользователя в соответствии с настройками в ней.