ข้ามไปยังเนื้อหาหลัก

RBAC API

API ที่เป็นมิตรกับผู้ใช้สำหรับ RBAC มากขึ้น API นี้เป็นส่วนย่อยของ Management API ผู้ใช้ RBAC สามารถใช้ API นี้เพื่อทำให้โค้ดง่ายขึ้น

อ้างอิง

ตัวแปร global e เป็น instance ของ 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 หากสิทธิ์นั้นไม่มีอยู่ (ไม่มีการเปลี่ยนแปลง)

ตัวอย่าง:

e.DeletePermission("read")

AddPermissionForUser()

AddPermissionForUser ใช้เพื่อเพิ่มสิทธิ์ให้กับผู้ใช้หรือบทบาท จะคืนค่า false หากผู้ใช้หรือบทบาทมีสิทธิ์นั้นอยู่แล้ว (ไม่มีการเปลี่ยนแปลง)

ตัวอย่าง:

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

AddPermissionsForUser()

AddPermissionsForUser ใช้เพื่อเพิ่มหลายสิทธิ์ให้กับผู้ใช้หรือบทบาท จะคืนค่า false หากผู้ใช้หรือบทบาทมีสิทธิ์ใดสิทธิ์หนึ่งอยู่แล้ว (ไม่มีการเปลี่ยนแปลง)

ตัวอย่าง:

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

DeletePermissionForUser()

DeletePermissionForUser ใช้เพื่อลบสิทธิ์ของผู้ใช้หรือบทบาท จะคืนค่า false หากผู้ใช้หรือบทบาทไม่มีสิทธิ์นั้น (ไม่มีการเปลี่ยนแปลง)

ตัวอย่าง:

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

DeletePermissionsForUser()

DeletePermissionsForUser ใช้เพื่อลบสิทธิ์ของผู้ใช้หรือบทบาท จะคืนค่า false หากผู้ใช้หรือบทบาทไม่มีสิทธิ์ใดๆ (ไม่มีการเปลี่ยนแปลง)

ตัวอย่าง:

e.DeletePermissionsForUser("bob")

GetPermissionsForUser()

GetPermissionsForUser ใช้เพื่อดึงสิทธิ์ของผู้ใช้หรือบทบาท

ตัวอย่าง:

e.GetPermissionsForUser("bob")

HasPermissionForUser()

HasPermissionForUser ใช้เพื่อตรวจสอบว่าผู้ใช้มีสิทธิ์นั้นหรือไม่

ตัวอย่าง:

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

GetImplicitRolesForUser()

GetImplicitRolesForUser gets implicit roles that a user has. Compared to GetRolesForUser(), this function retrieves indirect roles besides direct roles.

For example:

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

GetRolesForUser("alice") can only get: ["role:admin"].\ But GetImplicitRolesForUser("alice") will get: ["role:admin", "role:user"].

For example:

e.GetImplicitRolesForUser("alice")

GetImplicitUsersForRole()

GetImplicitUsersForRole gets all users inheriting the role. Compared to GetUsersForRole(), this function retrieves indirect users.

For example:

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

GetUsersForRole("role:user") can only get: ["role:admin"].\ But GetImplicitUesrsForRole("role:user") will get: ["role:admin", "alice"].

For example:

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

GetImplicitPermissionsForUser()

GetImplicitPermissionsForUser gets implicit permissions for a user or role.\ Compared to GetPermissionsForUser(), this function retrieves permissions for inherited roles.

For example:

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

GetPermissionsForUser("alice") can only get: [["alice", "data2", "read"]].\ But GetImplicitPermissionsForUser("alice") will get: [["admin", "data1", "read"], ["alice", "data2", "read"]].

For example:

e.GetImplicitPermissionsForUser("alice")

GetNamedImplicitPermissionsForUser()

GetNamedImplicitPermissionsForUser gets implicit permissions for a user or role by named policy Compared to GetImplicitPermissionsForUser(), this function allow you to specify the policy name.

For example:

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

GetImplicitPermissionsForUser("alice") only get: [["admin", "data1", "read"]], whose policy is default "p"

But you can specify the policy as "p2" to get: [["admin", "create"]] by GetNamedImplicitPermissionsForUser("p2","alice")

For example:

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

GetDomainsForUser()

GetDomainsForUser gets all domains which a user has.

For example:

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") could get ["domain1", "domain2"]

For example:

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

GetImplicitResourcesForUser()

GetImplicitResourcesForUser returns all policies that should be true for user.

For example:

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

g, alice, data2_admin

GetImplicitResourcesForUser("alice") will return [[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.