Перейти к основному контенту

RBAC API

Более дружественный API для RBAC. Этот API является подмножеством Management API. Пользователи RBAC могут использовать этот API для упрощения кода.

Ссылка

Глобальная переменная e является экземпляром Enforcer.

e, err := NewEnforcer("examples/rbac_model.conf", "examples/rbac_policy.csv")

GetRolesForUser()

GetRolesForUser получает роли, которые у пользователя есть.

Например:

res := e.GetRolesForUser("alice")

GetUsersForRole()

GetUsersForRole получает пользователей, которые имеют роль.

Например:

res := e.GetUsersForRole("data1_admin")

HasRoleForUser()

HasRoleForUser определяет, есть ли у пользователя роль.

Например:

res := e.HasRoleForUser("alice", "data1_admin")

AddRoleForUser()

AddRoleForUser добавляет роль для пользователя. Возвращает false, если у пользователя уже есть роль (то есть не затронуто).

Например:

e.AddRoleForUser("alice", "data2_admin")

AddRolesForUser()

AddRolesForUser добавляет несколько ролей для пользователя. Возвращает false, если у пользователя уже есть одна из этих ролей (то есть не затронуто).

Например:

var roles = []string{"data2_admin", "data1_admin"}
e.AddRolesForUser("alice", roles)

DeleteRoleForUser()

DeleteRoleForUser удаляет роль для пользователя. Возвращает false, если у пользователя нет роли (то есть не затронуто).

Например:

e.DeleteRoleForUser("alice", "data1_admin")

DeleteRolesForUser()

DeleteRolesForUser удаляет все роли для пользователя. Возвращает false, если у пользователя нет никаких ролей (то есть не затронуто).

Например:

e.DeleteRolesForUser("alice")

DeleteUser()

DeleteUser удаляет пользователя. Возвращает false, если пользователя не существует (то есть не затронуто).

Например:

e.DeleteUser("alice")

DeleteRole()

DeleteRole удаляет роль.

Например:

e.DeleteRole("data2_admin")

DeletePermission()

DeletePermission удаляет разрешение. Возвращает false, если разрешение не существует (т.е. не затронуто).

Например:

e.DeletePermission("read")

AddPermissionForUser()

AddPermissionForUser добавляет разрешение для пользователя или роли. Возвращает false, если у пользователя или роли уже есть разрешение (т.е. не затронуто).

Например:

e.AddPermissionForUser("bob", "read")

AddPermissionsForUser()

AddPermissionsForUser добавляет несколько разрешений для пользователя или роли. Возвращает false, если у пользователя или роли уже есть одно из разрешений (т.е. не затронуто).

Например:

var permissions = [][]string{{"data1", "read"},{"data2","write"}}
for i := 0; i < len(permissions); i++ {
e.AddPermissionsForUser("alice", permissions[i])
}

DeletePermissionForUser()

DeletePermissionForUser удаляет разрешение для пользователя или роли. Возвращает false, если у пользователя или роли нет разрешения (т.е. не затронуто).

Например:

e.DeletePermissionForUser("bob", "read")

DeletePermissionsForUser()

DeletePermissionsForUser удаляет разрешения для пользователя или роли. Возвращает false, если у пользователя или роли нет никаких разрешений (т.е. не затронуто).

Например:

e.DeletePermissionsForUser("bob")

GetPermissionsForUser()

GetPermissionsForUser получает разрешения для пользователя или роли.

Например:

e.GetPermissionsForUser("bob")

HasPermissionForUser()

HasPermissionForUser определяет, есть ли у пользователя разрешение.

Например:

e.HasPermissionForUser("alice", []string{"read"})

GetImplicitRolesForUser()

GetImplicitRolesForUser получает неявные роли, которые имеет пользователь. По сравнению с GetRolesForUser(), эта функция извлекает косвенные роли помимо прямых ролей.

Например:

g, alice, role:admin  
g, role:admin, role:user

GetRolesForUser("alice") может получить только: ["role:admin"].\ Но GetImplicitRolesForUser("alice") получит: ["role:admin", "role:user"].

Например:

e.GetImplicitRolesForUser("alice")

GetImplicitUsersForRole()

GetImplicitUsersForRole получает всех пользователей, наследующих роль. По сравнению с GetUsersForRole(), эта функция извлекает косвенных пользователей.

Например:

g, alice, role:admin  
g, role:admin, role:user

GetUsersForRole("role:user") может получить только: ["role:admin"].\ Но GetImplicitUesrsForRole("role:user") вернет: ["role:admin", "alice"].

Например:

users := e.GetImplicitUsersForRole("role:user")

GetImplicitPermissionsForUser()

GetImplicitPermissionsForUser получает неявные разрешения для пользователя или роли.\ По сравнению с GetPermissionsForUser(), эта функция извлекает разрешения для унаследованных ролей.

Например:

p, admin, data1, read  
p, alice, data2, read
g, alice, admin

GetPermissionsForUser("alice") может получить только: [["alice", "data2", "read"]].\ Но GetImplicitPermissionsForUser("alice") получит: [["admin", "data1", "read"], ["alice", "data2", "read"]].

Например:

e.GetImplicitPermissionsForUser("alice")

GetNamedImplicitPermissionsForUser()

GetNamedImplicitPermissionsForUser получает неявные разрешения для пользователя или роли по именованной политике. По сравнению с GetImplicitPermissionsForUser(), эта функция позволяет вам указать имя политики.

Например:

p, admin, data1, read
p2, admin, create
g, alice, admin

GetImplicitPermissionsForUser("alice") получает только: [["admin", "data1", "read"]], у которого политика по умолчанию "p"

Но вы можете указать политику как "p2", чтобы получить: [["admin", "create"]] с помощью GetNamedImplicitPermissionsForUser("p2","alice")

Например:

e.GetNamedImplicitPermissionsForUser("p2","alice")

GetDomainsForUser()

GetDomainsForUser получает все домены, которые есть у пользователя.

Например:

p, admin, domain1, data1, read
p, admin, domain2, data2, read
p, admin, domain2, data2, write
g, alice, admin, domain1
g, alice, admin, domain2

GetDomainsForUser("alice") может получить ["domain1", "domain2"]

Например:

result, err := e.GetDomainsForUser("alice")

GetImplicitResourcesForUser()

GetImplicitResourcesForUser возвращает все политики, которые должны быть истинными для пользователя.

Например:

p, alice, data1, read
p, bob, data2, write
p, data2_admin, data2, read
p, data2_admin, data2, write

g, alice, data2_admin

GetImplicitResourcesForUser("alice") вернет [[alice data1 read] [alice data2 read] [alice data2 write]]

resources, err := e.GetImplicitResourcesForUser("alice")

GetImplicitUsersForPermission()

GetImplicitUsersForPermission получает неявных пользователей для разрешения.

Например:

p, admin, data1, read
p, bob, data1, read
g, alice, admin

GetImplicitUsersForPermission("data1", "read") вернет: "alice", "bob".

Примечание: будут возвращены только пользователи, роли (2-й аргумент в "g") будут исключены.

users, err := e.GetImplicitUsersForPermission("data1", "read")

GetAllowedObjectConditions()

GetAllowedObjectConditions возвращает строковый массив условий объекта, к которому пользователь может получить доступ.

Например:

p, alice, r.obj.price < 25, read
p, admin, r.obj.category_id = 2, read
p, bob, r.obj.author = bob, write

g, alice, admin

e.GetAllowedObjectConditions("alice", "read", "r.obj.") вернет "price < 25", "category_id = 2", nil

Примечание:

  1. prefix: Вы можете настроить префикс условий объекта, и "r.obj." обычно используется в качестве префикса. После удаления префикса остается условие объекта. Если есть политика obj, которая не соответствует требованию префикса, будет возвращена errors.ERR_OBJ_CONDITION.

  2. Если массив 'objectConditions' пуст, верните errors.ERR_EMPTY_CONDITION. Эта ошибка возвращается, потому что некоторые адаптеры данных ORM по умолчанию возвращают полные данные таблицы, когда они получают пустое условие, что часто противоречит ожиданиям (например, GORM). Если вы используете адаптер, который не ведет себя так, вы можете выбрать игнорирование этой ошибки.

conditions, err := e.GetAllowedObjectConditions("alice", "read", "r.obj.")

GetImplicitUsersForResource()

GetImplicitUsersForResource возвращает неявного пользователя на основе ресурса.

Например:

p, alice, data1, read
p, bob, data2, write
p, data2_admin, data2, read
p, data2_admin, data2, write
g, alice, data2_admin

GetImplicitUsersForResource("data2") вернет ["bob", "data2", "write"], ["alice", "data2", "read"] ["alice", "data2", "write"]], nil.

GetImplicitUsersForResource("data1") вернет ["alice", "data1", "read"]], nil.

ImplicitUsers, err := e.GetImplicitUsersForResource("data2")
заметка

Будут возвращены только пользователи, роли (2-й аргумент в "g") будут исключены.