Bỏ qua đến nội dung chính

RBAC API

The RBAC API is a convenience layer for role-based operations (roles for user, users for role, permissions, etc.). It is a subset of the Management API aimed at RBAC use cases.

Tài liệu tham khảo​

The global variable e represents an Enforcer instance.

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

GetRolesForUser()​

Retrieves all roles assigned to a user.

Ví dụ:

res := e.GetRolesForUser("alice")

GetUsersForRole()​

Retrieves all users assigned to a role.

Ví dụ:

res := e.GetUsersForRole("data1_admin")

HasRoleForUser()​

Checks whether a user has a specific role.

Ví dụ:

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

AddRoleForUser()​

Assigns a role to a user. Trả về false nếu người dùng đã có vai trò đó (tức là không bị ảnh hưởng).

Ví dụ:

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

AddRolesForUser()​

Assigns multiple roles to a user. Trả về false nếu người dùng đã có một trong các vai trò này (tức là không bị ảnh hưởng).

Ví dụ:

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

DeleteRoleForUser()​

Removes a role from a user. Trả về false nếu người dùng không có vai trò đó (tức là không bị ảnh hưởng).

Ví dụ:

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

DeleteRolesForUser()​

Removes all roles from a user. Trả về false nếu người dùng không có bất kỳ vai trò nào (tức là không bị ảnh hưởng).

Ví dụ:

e.DeleteRolesForUser("alice")

DeleteUser()​

Removes a user from the system. Trả về false nếu người dùng không tồn tại (tức là không bị ảnh hưởng).

Ví dụ:

e.DeleteUser("alice")

DeleteRole()​

Removes a role from the system.

Ví dụ:

e.DeleteRole("data2_admin")

DeletePermission()​

Removes a permission from the system. Trả về false nếu quyền không tồn tại (tức là không bị ảnh hưởng).

Ví dụ:

e.DeletePermission("read")

AddPermissionForUser()​

Grants a permission to a user or role. Trả về false nếu người dùng hoặc vai trò đã có quyền đó (tức là không bị ảnh hưởng).

Ví dụ:

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

AddPermissionsForUser()​

Grants multiple permissions to a user or role. Trả về false nếu người dùng hoặc vai trò đã có một trong các quyền (tức là không bị ảnh hưởng).

Ví dụ:

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

DeletePermissionForUser()​

Revokes a permission from a user or role. Trả về false nếu người dùng hoặc vai trò không có quyền đó (a.k.a không bị ảnh hưởng).

Ví dụ:

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

DeletePermissionsForUser()​

Revokes all permissions from a user or role. Trả về false nếu người dùng hoặc vai trò không có bất kỳ quyền nào (a.k.a không bị ảnh hưởng).

Ví dụ:

e.DeletePermissionsForUser("bob")

GetPermissionsForUser()​

Retrieves all permissions for a user or role.

Ví dụ:

e.GetPermissionsForUser("bob")

GetNamedPermissionsForUser()​

GetNamedPermissionsForUser gets permissions for a user or role by named policy.

Ví dụ:

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

GetNamedPermissionsForUser("p", "alice") will return [["alice", "data1", "read"]]. GetNamedPermissionsForUser("p2", "alice") will return [["admin", "create"]].

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

HasPermissionForUser()​

HasPermissionForUser xác định xem một người dùng có quyền hạn nào đó hay không.

Ví dụ:

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

GetImplicitRolesForUser()​

GetImplicitRolesForUser lấy các vai trò ngầm định mà một người dùng có. So với GetRolesForUser(), hàm này lấy cả các vai trò gián tiếp ngoài các vai trò trực tiếp.

Ví dụ:

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

GetRolesForUser("alice") chỉ có thể lấy được: ["role:admin"].
Nhưng GetImplicitRolesForUser("alice") sẽ lấy được: ["role:admin", "role:user"].

Ví dụ:

e.GetImplicitRolesForUser("alice")

GetNamedImplicitRolesForUser()​

GetNamedImplicitRolesForUser gets implicit roles that a user has by named policy.

Ví dụ:

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

GetNamedImplicitRolesForUser("g", "alice") will return ["admin", "super_admin"]. GetNamedImplicitRolesForUser("g2", "alice") will return ["user", "guest"].

roles, err := e.GetNamedImplicitRolesForUser("g", "alice")

GetImplicitUsersForRole()​

GetImplicitUsersForRole lấy tất cả người dùng kế thừa vai trò. So với GetUsersForRole(), hàm này truy xuất người dùng gián tiếp.

Ví dụ:

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

GetUsersForRole("role:user") chỉ có thể lấy được: ["role:admin"].
Nhưng GetImplicitUsersForRole("role:user") sẽ lấy được: ["role:admin", "alice"].

Ví dụ:

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

GetImplicitPermissionsForUser()​

GetImplicitPermissionsForUser lấy quyền ẩn cho một người dùng hoặc vai trò.
So với GetPermissionsForUser(), hàm này truy xuất quyền cho các vai trò kế thừa.

Ví dụ:

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

GetPermissionsForUser("alice") chỉ có thể lấy: [["alice", "data2", "read"]].
Nhưng GetImplicitPermissionsForUser("alice") sẽ lấy: [["admin", "data1", "read"], ["alice", "data2", "read"]].

Ví dụ:

e.GetImplicitPermissionsForUser("alice")

GetNamedImplicitPermissionsForUser()​

GetNamedImplicitPermissionsForUser lấy các quyền ngầm định cho một người dùng hoặc vai trò theo chính sách được đặt tên. So với GetImplicitPermissionsForUser(), hàm này cho phép bạn chỉ định tên chính sách.

Ví dụ:

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

GetImplicitPermissionsForUser("alice") chỉ lấy: [["admin", "data1", "read"]], có chính sách mặc định là "p"

Nhưng bạn có thể chỉ định chính sách là "p2" để lấy: [["admin", "create"]] bằng GetNamedImplicitPermissionsForUser("p2","alice")

Ví dụ:

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

GetDomainsForUser()​

GetDomainsForUser lấy tất cả các miền mà một người dùng có.

Ví dụ:

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") có thể lấy ["domain1", "domain2"]

Ví dụ:

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

GetImplicitResourcesForUser()​

Returns all policies that apply to a user, including those inherited through roles.

Ví dụ:

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

g, alice, data2_admin

GetImplicitResourcesForUser("alice") sẽ trả về

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

GetImplicitUsersForPermission()​

Retrieves all users with a specific permission, including those with implicit permissions through roles.

Ví dụ:

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

GetImplicitUsersForPermission("data1", "read") sẽ trả về: ["alice", "bob"].

Lưu ý: chỉ người dùng sẽ được trả về, vai trò (đối số thứ 2 trong "g") sẽ bị loại trừ.

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

GetImplicitObjectPatternsForUser()​

Returns all object patterns (including wildcards) that a user can access for a given domain and action.

Ví dụ:

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

GetImplicitObjectPatternsForUser("alice", "chronicle/123", "read") will return ["location/*"]. GetImplicitObjectPatternsForUser("bob", "chronicle/456", "read") will return ["location/789"].

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

GetAllowedObjectConditions()​

Returns object conditions that a user can access.

Ví dụ:

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.") sẽ trả về ["price < 25", "category_id = 2"], nil

Lưu ý:

  1. prefix: Bạn có thể tùy chỉnh tiền tố của điều kiện đối tượng, và "r.obj." thường được sử dụng làm tiền tố. Sau khi loại bỏ tiền tố, phần còn lại là điều kiện của đối tượng. Nếu có một chính sách obj không đáp ứng yêu cầu tiền tố, một errors.ERR_OBJ_CONDITION sẽ được trả về.

  2. Nếu mảng 'objectConditions' trống, trả về errors.ERR_EMPTY_CONDITION.

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

GetImplicitUsersForResource()​

Returns all users with access to a resource, including those with implicit permissions through roles.

Ví dụ:

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

GetImplicitUsersForResource("data2") sẽ trả về [["bob", "data2", "write"], ["alice", "data2", "read"] ["alice", "data2", "write"]], nil.

GetImplicitUsersForResource("data1") sẽ trả về [["alice", "data1", "read"]], nil.

ImplicitUsers, err := e.GetImplicitUsersForResource("data2")
ghi chú

Chỉ người dùng sẽ được trả về, vai trò (đối số thứ 2 trong "g") sẽ bị loại trừ.

GetNamedImplicitUsersForResource()​

Returns all users with access to a resource through a named policy, including those with implicit permissions through roles. This function handles resource role relationships through named policies (e.g., g2, g3, etc.).

Ví dụ:

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

GetNamedImplicitUsersForResource("g2", "app") will return users who have access to admin_data through g2 relationship.

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.