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

RBAC API

Một API thân thiện hơn cho RBAC. API này là một tập hợp con của API Quản lý. Người dùng RBAC có thể sử dụng API này để đơn giản hóa mã nguồn.

Tài liệu tham khảo

Biến toàn cục e là thể hiện của Enforcer.

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

GetRolesForUser()

GetRolesForUser lấy các vai trò mà một người dùng có.

Ví dụ:

res := e.GetRolesForUser("alice")

GetUsersForRole()

GetUsersForRole lấy các người dùng có một vai trò.

Ví dụ:

res := e.GetUsersForRole("data1_admin")

HasRoleForUser()

HasRoleForUser xác định xem một người dùng có một vai trò hay không.

Ví dụ:

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

AddRoleForUser()

AddRoleForUser thêm một vai trò cho một người dùng. 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()

AddRolesForUser thêm nhiều vai trò cho một người dùng. 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()

DeleteRoleForUser xóa một vai trò cho người dùng. 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()

DeleteRolesForUser xóa tất cả các vai trò cho người dùng. 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()

XóaNgườiDùng xóa một người dùng. 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()

XóaVaiTrò xóa một vai trò.

Ví dụ:

e.DeleteRole("data2_admin")

DeletePermission()

XóaQuyền xóa một quyền. 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()

AddPermissionForUser thêm một quyền cho người dùng hoặc vai trò. 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()

AddPermissionsForUser thêm nhiều quyền cho người dùng hoặc vai trò. 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()

DeletePermissionForUser xóa một quyền cho người dùng hoặc vai trò. 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()

DeletePermissionsForUser xóa các quyền cho người dùng hoặc vai trò. 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()

GetPermissionsForUser lấy các quyền cho người dùng hoặc vai trò.

Ví dụ:

e.GetPermissionsForUser("bob")

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

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

GetImplicitResourcesForUser trả về tất cả các chính sách mà nên đúng cho người dùng.

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

GetImplicitUsersForPermission lấy người dùng ngầm cho một quyền.

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

GetAllowedObjectConditions()

GetAllowedObjectConditions trả về một mảng chuỗi các điều kiện đối tượng mà người dùng có thể truy cập.

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

GetImplicitUsersForResource trả về người dùng ngầm dựa trên tài nguyên.

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ừ.