Существует два способа описать роль, которые могут использоваться одновременно:
Результирующая матрица прав для роли определяется как объединение множеств полномочий в соответствующих ячейках матриц расширяемых ролей и явно заданной матрицы.
Расширение ролей
Расширение ролей выполняется с помощью элемента extends, который содержит список расширяемых ролей (список может быть пустым). Все расширяемые роли должны быть ранее определены:
roles: {
...
roleX : {
extends : [roleY, roleZ] // Роль roleX расширяет роли roleY и roleZ
}
...
}
Явное задание матрицы прав
Явное задание матрицы выполняется с помощью элемента rights, который представляет собой массив троек: субъект (элемент from), объект, к которому требуется доступ (элемент to) и множество полномочий (элемент permissions).
Субъект и объект задаются одним из следующих способов:
from: tlsfrom: [app0, app1]from: @anyПолномочия задаются одним из следующих способов:
permissions: stream/readpermissions: stream/@anypermissions: [conn/@any, stream/set_status]Пример:
roles : {
system : {
rights :[
{ from : @any /* любой тип */
, to : connection_manager /* конкретный тип */
, permissions : conn/@any /* любое полномочие из категории conn */
},
{ from : tls
, to : connection_manager
, permissions : [ stream/read, stream/set_status ] /* любое из перечисленных полномочий */
},
{ from : @any
, to : tls
, permissions : stream/@any
}
]
},
camera : {
rights : [
{ from : @any
, to : camera
, permissions : camera/@any
}
]
},
gps : {
rights : [
{ from : @any
, to : gps
, permissions : gps/@any
}
]
},
user : {
extends : system /* расширяет роль system */
},
admin : {
extends : [user, camera] /* расширяет роли user & camera */
}
}
В начало