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

RBAC API

RBAC API — это удобный слой для операций, связанных с ролями (роли для пользователя, пользователи для роли, разрешения и т. д.). Это подмножество Management API, предназначенное для сценариев использования RBAC.

Справочник​

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

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

GetRolesForUser()​

Получает все роли, назначенные пользователю.

Например:

res := e.GetRolesForUser("alice")

GetUsersForRole()​

Получает всех пользователей, назначенных на роль.

Например:

res := e.GetUsersForRole("data1_admin")

HasRoleForUser()​

Проверяет, имеет ли пользователь конкретную роль.

Например:

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

AddRoleForUser()​

Назначает роль пользователю. Возвращает false, если пользователь уже имеет эту роль (то есть изменения не произведены).

Например:

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

AddRolesForUser()​

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

Например:

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

DeleteRoleForUser()​

Удаляет роль у пользователя. Возвращает false, если пользователь не имеет этой роли (то есть изменения не произведены).

Например:

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

DeleteRolesForUser()​

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

Например:

e.DeleteRolesForUser("alice")

DeleteUser()​

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

Например:

e.DeleteUser("alice")

DeleteRole()​

Удаляет роль из системы.

Например:

e.DeleteRole("data2_admin")

DeletePermission()​

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

Например:

e.DeletePermission("read")

AddPermissionForUser()​

Предоставляет разрешение пользователю или роли. Возвращает false, если у пользователя или роли уже есть это разрешение (т.е. изменения не внесены).

Например:

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

AddPermissionsForUser()​

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

Например:

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

DeletePermissionForUser()​

Отзывает разрешение у пользователя или роли. Возвращает false, если у пользователя или роли нет этого разрешения (т.е. изменения не внесены).

Например:

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

DeletePermissionsForUser()​

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

Например:

e.DeletePermissionsForUser("bob")

GetPermissionsForUser()​

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

Например:

e.GetPermissionsForUser("bob")

GetNamedPermissionsForUser()​

Функция GetNamedPermissionsForUser получает разрешения для пользователя или роли по именованной политике.

Например:

p, alice, data1, read
p, bob, data2, write
p2, admin, create
g, alice, admin

GetNamedPermissionsForUser("p", "alice") вернет [["alice", "data1", "read"]]. GetNamedPermissionsForUser("p2", "alice") вернет [["admin", "create"]].

permissions, err := e.GetNamedPermissionsForUser("p", "alice")

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")

GetNamedImplicitRolesForUser()​

Функция GetNamedImplicitRolesForUser получает неявные роли, которые имеет пользователь, по именованной политике.

Например:

g, alice, admin
g, admin, super_admin
g2, alice, user
g2, user, guest

GetNamedImplicitRolesForUser("g", "alice") вернет ["admin", "super_admin"]. GetNamedImplicitRolesForUser("g2", "alice") вернет ["user", "guest"].

roles, err := e.GetNamedImplicitRolesForUser("g", "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()​

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

Например:

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()​

Извлекает всех пользователей с конкретным разрешением, включая тех, кто имеет неявные разрешения через роли.

Например:

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

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

Примечание: возвращаются только пользователи; роли (второй аргумент в "g") исключаются.

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

GetImplicitObjectPatternsForUser()​

Возвращает все шаблоны объектов (включая подстановочные знаки), к которым пользователь может получить доступ для заданного домена и действия.

Например:

p, admin, chronicle/123, location/*, read
p, user, chronicle/456, location/789, read
g, alice, admin
g, bob, user

GetImplicitObjectPatternsForUser("alice", "chronicle/123", "read") вернет ["location/*"]. GetImplicitObjectPatternsForUser("bob", "chronicle/456", "read") вернет ["location/789"].

patterns, err := e.GetImplicitObjectPatternsForUser("alice", "chronicle/123", "read")

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. If the 'objectConditions' array is empty, return errors.ERR_EMPTY_CONDITION This error is returned because some data adapters' ORM return full table data by default when they receive an empty condition, which tends to behave contrary to expectations.(e.g. GORM) If you are using an adapter that does not behave like this, you can choose to ignore this error.

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

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")
примечание

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

GetNamedImplicitUsersForResource()​

Возвращает всех пользователей с доступом к ресурсу через именованную политику, включая тех, у кого есть неявные разрешения через роли. Эта функция обрабатывает связи ролей ресурсов через именованные политики (например, g2, g3 и т.д.).

Например:

p, admin_group, admin_data, *
g, admin, admin_group
g2, app, admin_data

GetNamedImplicitUsersForResource("g2", "app") вернет пользователей, имеющих доступ к admin_data через связь g2.

ImplicitUsers, err := e.GetNamedImplicitUsersForResource("g2", "app")

Comments are powered by giscus and GitHub Discussions. They load from giscus.app and GitHub only after you click the button below.