Ir al contenido principal

RBAC API

Una API más amigable para RBAC. Esta API es un subconjunto de la API de Gestión. Los usuarios de RBAC podrían usar esta API para simplificar el código.

Referencia

la variable global e es una instancia de Enforcer.

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

GetRolesForUser()

GetRolesForUser obtiene los roles que un usuario tiene.

Por ejemplo:

res := e.GetRolesForUser("alice")

GetUsersForRole()

GetUsersForRole obtiene los usuarios que tienen un rol.

Por ejemplo:

res := e.GetUsersForRole("data1_admin")

HasRoleForUser()

HasRoleForUser determina si un usuario tiene un rol.

Por ejemplo:

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

AddRoleForUser()

AddRoleForUser añade un rol a un usuario. Devuelve falso si el usuario ya tiene el rol (es decir, no afectado).

Por ejemplo:

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

AddRolesForUser()

AddRolesForUser añade múltiples roles a un usuario. Devuelve falso si el usuario ya tiene uno de estos roles (es decir, no afectado).

Por ejemplo:

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

DeleteRoleForUser()

DeleteRoleForUser elimina un rol de un usuario. Devuelve falso si el usuario no tiene el rol (es decir, no afectado).

Por ejemplo:

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

DeleteRolesForUser()

DeleteRolesForUser elimina todos los roles de un usuario. Devuelve falso si el usuario no tiene ningún rol (es decir, no afectado).

Por ejemplo:

e.DeleteRolesForUser("alice")

DeleteUser()

DeleteUser elimina un usuario. Devuelve falso si el usuario no existe (es decir, no afectado).

Por ejemplo:

e.DeleteUser("alice")

DeleteRole()

DeleteRole elimina un rol.

Por ejemplo:

e.DeleteRole("data2_admin")

DeletePermission()

DeletePermission elimina un permiso. Devuelve falso si el permiso no existe (es decir, no afectado).

Por ejemplo:

e.DeletePermission("read")

AddPermissionForUser()

AddPermissionForUser añade un permiso a un usuario o rol. Devuelve falso si el usuario o rol ya tiene el permiso (es decir, no afectado).

Por ejemplo:

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

AddPermissionsForUser()

AddPermissionsForUser añade múltiples permisos a un usuario o rol. Devuelve falso si el usuario o rol ya tiene uno de los permisos (es decir, no afectado).

Por ejemplo:

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

DeletePermissionForUser()

DeletePermissionForUser elimina un permiso de un usuario o rol. Devuelve falso si el usuario o rol no tiene el permiso (es decir, no afectado).

Por ejemplo:

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

DeletePermissionsForUser()

DeletePermissionsForUser elimina permisos de un usuario o rol. Devuelve falso si el usuario o rol no tiene ningún permiso (es decir, no afectado).

Por ejemplo:

e.DeletePermissionsForUser("bob")

GetPermissionsForUser()

GetPermissionsForUser obtiene permisos para un usuario o rol.

Por ejemplo:

e.GetPermissionsForUser("bob")

HasPermissionForUser()

HasPermissionForUser determina si un usuario tiene un permiso.

Por ejemplo:

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

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