跳转至主要内容

RBAC 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。

例如:

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(aka不受影响)。

例如:

e.DeletePermission("read")

AddPermissionForUser()

AddPermissionForUser 为用户或角色添加权限。 如果用户或角色已经拥有该权限(aka不受影响),则返回false。

例如:

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

AddPermissionsForUser()

AddPermissionForUser 为用户或角色添加多个权限。 如果用户或角色已经有一个权限,则返回 false (不会受影响)。

例如:

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

DeletePermissionForUser()

DeletePermissionForUser 删除用户或角色的权限。 如果用户或角色没有权限(aka不受影响),则返回false。

例如:

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

DeletePermissionsForUser()

DeletePermissionsForUser 删除用户或角色的权限。 如果用户或角色没有任何权限(aka不受影响),则返回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

GetRolesForUser("Alice") 只能获取:["role:admin"]
但 GetImplicitUsersForRole("role:alice") 将获取:["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", "data 2", "read"]]。
但GetImplicitPermissionsForUser("alice") 将获取:[["admin", "data1", "read"], ["alice", "data2", "read"]]。

例如:

e.GetImplicitPermissionsForUser("alice")

GetNamedImplicitPermissionsForUser()

GetNamedImplicitPermissionsForUser 通过命名策略获得用户或角色的隐含权限 与 GetImplicitPermissionPermissionsForUser() 相比,此函数允许您指定策略名称。

例如: p, admin, data1, read p2, admin, creaty g, alice, admin

GetImplicitPermissionsForUser("Alice") 只能获取到默认为“p”的权限: [["admin", "data1", "read"]]

但是你可以指定策略为 "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 返回为true的策略给用户。

例如:

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

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