Существует два способа описать роль, которые могут использоваться одновременно:
Результирующая матрица прав для роли определяется как объединение множеств полномочий в соответствующих ячейках матриц расширяемых ролей и явно заданной матрицы.
Расширение ролей
Расширение ролей выполняется с помощью элемента extends
, который содержит список расширяемых ролей (список может быть пустым). Все расширяемые роли должны быть ранее определены:
roles: {
...
roleX : {
extends : [roleY, roleZ] // Роль roleX расширяет роли roleY и roleZ
}
...
}
Явное задание матрицы прав
Явное задание матрицы выполняется с помощью элемента rights
, который представляет собой массив троек: субъект (элемент from
), объект, к которому требуется доступ (элемент to
) и множество полномочий (элемент permissions
).
Субъект и объект задаются одним из следующих способов:
from: tls
from: [app0, app1]
from: @any
Полномочия задаются одним из следующих способов:
permissions: stream/read
permissions: stream/@any
permissions: [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 */
}
}
В начало