OrBAC
Что такое OrBAC?
OrBAC (Organisation-Based Access Control) расширяет RBAC за счет абстракций и измерения организации. Политики ссылаются на роли, действия (activities) и представления; конкретные пользователи, операции и объекты отображаются на них в рамках каждой организации. Это обеспечивает стабильность политик при изменении сущностей.
Три отображения (все ограничены областью организации):
- Empower — пользователь → роль
- Use — операция → действие (activity)
- Consider — объект → представление
Разрешение предоставляется, если запрос (subject, action, object) отображается на пару (role, activity, view), которой предоставлено разрешение в данно й организации.
Model
[request_definition]
r = sub, org, obj, act
[policy_definition]
p = role, activity, view, org
[role_definition]
g = _, _, _
g2 = _, _, _
g3 = _, _, _
[policy_effect]
e = some(where (p.eft == allow))
[matchers]
m = g(r.sub, p.role, r.org) && g2(r.act, p.activity, r.org) && g3(r.obj, p.view, r.org) && r.org == p.org
g— субъект имеет роль в организации (Empower)g2— операция является действием (activity) в организации (Use)g3— объект входит в представление в организации (Consider)r.org == p.org— та же организация
Примеры политик
Правила разрешений указывают, какие роли могут выполнять какие действия над какими представлениями в каждой организации:
# Permission: role, activity, view, organization
p, manager, modify, document, org1
p, manager, consult, document, org1
p, employee, consult, document, org1
p, manager, modify, report, org2
p, manager, consult, report, org2
p, employee, consult, report, org2
Правила Empower назначают роли субъектам внутри организаций:
# Empower: subject, role, organization
g, alice, manager, org1
g, bob, employee, org1
g, charlie, manager, org2
g, david, employee, org2
Правила Use отображают конкретные операции на абстрактные действия:
# Use: action, activity, organization
g2, write, modify, org1
g2, read, consult, org1
g2, write, modify, org2
g2, read, consult, org2
Правила Consider отображают конкретные объекты на абстрактные представлени я:
# Consider: object, view, organization
g3, data1, document, org1
g3, data2, document, org1
g3, report1, report, org2
g3, report2, report, org2
Пример кода
import "github.com/casbin/casbin/v3"
e, _ := casbin.NewEnforcer("examples/orbac_model.conf", "examples/orbac_policy.csv")
// alice is a manager in org1, can read and write documents
ok, _ := e.Enforce("alice", "org1", "data1", "read") // true
ok, _ = e.Enforce("alice", "org1", "data1", "write") // true
// bob is an employee in org1, can only read documents
ok, _ = e.Enforce("bob", "org1", "data1", "read") // true
ok, _ = e.Enforce("bob", "org1", "data1", "write") // false
// charlie is a manager in org2, can read and write reports
ok, _ = e.Enforce("charlie", "org2", "report1", "read") // true
ok, _ = e.Enforce("charlie", "org2", "report1", "write") // true
// Cross-organization access is denied
ok, _ = e.Enforce("alice", "org2", "report1", "read") // false
ok, _ = e.Enforce("charlie", "org1", "data1", "read") // false
Преимущества
- Абстракция — политики используют роли, действия и представления; вы можете изменять конкретные соответствия без переписывания политик.
- Организационная изоляция — каждая организация имеет свои собственные соответствия и разрешения; одна модель покрывает все организации.
- Масштабируемость — меньшее количество более понятных правил в многоорганизационных конфигурациях.
Comments are powered by giscus and GitHub Discussions. They load from giscus.app and GitHub only after you click the button below.