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

RBAC API

Более дружественный API для RBAC. Этот API является подмножеством 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, если пользователь уже имеет роль (aka not affected).

Например:

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

AddRolesForUser()

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

Например:

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

DeleteRoleForUser()

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

Например:

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

DeleteRolesForUser()

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

Например:

e.DeleteRolesForUser("alice")

DeleteUser()

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

Например:

e.DeleteUser("alice")

DeleteRole()

Удалить роль.

Например:

e.DeleteRole("data2_admin")

DeletePermission()

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

Например:

e.DeletePermission("read")

AddPermissionForUser()

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

Например:

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

AddPermissionsForUser()

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

Например:

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

DeletePermissionForUser()

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

Например:

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

DeletePermissionsForUser()

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

Например:

e.DeletePermissionsForUser("bob")

GetPermissionsForUser()

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

Например:

e.GetPermissionsForUser("bob")

HasPermissionForUser()

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

Например:

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

GetImplicitRolesForUser()

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

For example:
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(), эта функция получает некосвенных пользователей.

For example:
g, alice, role:admin
g, role:admin, role:user

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

Например:

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

GetImplicitPermissionsForUser()

GetImplicitsForUser получает неявные разрешения для пользователя или роли.
По сравнению с 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()

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

Например: p, admin, data1, read p2, admin, create g, alice, admin

GetImplicitsForUser("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 gets implicit users for a permission.

For example:

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

GetImplicitUsersForPermission("data1", "read") will return: ["alice", "bob"].

Note: only users will be returned, roles (2nd arg in "g") will be excluded.

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

GetAllowedObjectConditions()

GetAllowedObjectConditions returns a string array of object conditions that the user can access.

For example:

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.") will return ["price < 25", "category_id = 2"], nil

Note:

  1. prefix: You can customize the prefix of the object conditions, and "r.obj." is commonly used as a prefix. After removing the prefix, the remaining part is the condition of the object. If there is an obj policy that does not meet the prefix requirement, an errors.ERR_OBJ_CONDITION will be returned.

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

GetImplicitUsersForResource return implicit user based on resource.

For example:

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

GetImplicitUsersForResource("data2") will return [["bob", "data2", "write"], ["alice", "data2", "read"] ["alice", "data2", "write"]], nil.

GetImplicitUsersForResource("data1") will return [["alice", "data1", "read"]], nil.

ImplicitUsers, err := e.GetImplicitUsersForResource("data2")
note

Only users will be returned, roles (2nd arg in "g") will be excluded.