Passer au contenu principal

RBAC API

Une API plus conviviale pour RBAC. Cette API est un sous-ensemble de Management API. Les utilisateurs de RBAC peuvent utiliser cette API pour simplifier le code.

Référence​

la variable globale e est l'instance Enforcer .

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

GetRolesForUser()​

GetRolesForUser obtient les rôles d'un utilisateur.

Par exemple :

res := e.GetRolesForUser("alice")

GetUsersForRole()​

GetUsersForRole récupère les utilisateurs qui ont un rôle.

Par exemple :

res := e.GetUsersForRole("data1_admin")

HasRoleForUser()​

HasRoleForUser détermine si un utilisateur a un rôle.

Par exemple :

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

AddRoleForUser()​

AddRoleForUser ajoute un rôle pour un utilisateur. Renvoie false si l'utilisateur a déjà le rôle (aka non affecté).

Par exemple :

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

AddRolesForUser()​

AddRolesForUser ajoute plusieurs rôles pour un utilisateur. Renvoie false si l'utilisateur a déjà un de ces rôles (aka non affecté).

Par exemple :

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

DeleteRoleForUser()​

Supprimer ce rôleForUser supprime un rôle pour un utilisateur. Renvoie false si l'utilisateur n'a pas le rôle (aka non affecté).

Par exemple :

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

DeleteRolesForUser()​

Supprimer les RolesForUser de tous les rôles d'un utilisateur. Renvoie false si l'utilisateur n'a aucun rôle (aka non affecté).

Par exemple :

e.DeleteRolesForUser("alice")

DeleteUser()​

Supprimer un utilisateur Renvoie false si l'utilisateur n'existe pas (aka non affecté).

Par exemple :

e.DeleteUser("alice")

DeleteRole()​

Supprimer un rôle

Par exemple :

e.DeleteRole("data2_admin")

DeletePermission()​

DeletePermission supprime une permission. Renvoie false si la permission n'existe pas (aka non affecté).

Par exemple :

e.DeletePermission("read")

AddPermissionForUser()​

AddPermissionForUser ajoute une permission pour un utilisateur ou un rôle. Renvoie false si l'utilisateur ou le rôle a déjà la permission (aka non affecté).

Par exemple :

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

AddPermissionsForUser()​

AddPermissionsForUser ajoute plusieurs permissions pour un utilisateur ou un rôle. Renvoie false si l'utilisateur ou le rôle a déjà une des permissions (aka non affecté).

Par exemple :

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

DeletePermissionForUser()​

Supprimer PermissionForUser supprime une permission pour un utilisateur ou un rôle. Renvoie false si l'utilisateur ou le rôle n'a pas la permission (aka non affecté).

Par exemple :

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

DeletePermissionsForUser()​

Supprimer les permissions pour l'utilisateur ou le rôle. Retourne false si l'utilisateur ou le rôle n'a pas les permissions (aka non affecté).

Par exemple :

e.DeletePermissionsForUser("bob")

GetPermissionsForUser()​

GetPermissionsForUser obtient les autorisations pour un utilisateur ou un rôle.

Par exemple :

e.GetPermissionsForUser("bob")

HasPermissionForUser()​

HasPermissionForUser détermine si un utilisateur a une permission.

Par exemple :

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

GetImplicitRolesForUser()​

GetImplicitRolesForUser obtient des rôles implicites qu'un utilisateur possède. Comparée à GetRolesForUser(), cette fonction récupère les rôles indirects en plus des rôles directs.

Par exemple :
g, alice, role:admin
g, role:admin, rôle:user

GetRolesForUser("alice") ne peut obtenir que : ["role:admin"].
Mais GetImplicitRolesForUser("alice") obtiendra : ["role:admin", "role:user"].

Par exemple :

e.GetImplicitRolesForUser("alice")

GetImplicitUsersForRole()​

GetImplicitUsersForRole permet à tous les utilisateurs d'hériter du rôle. Comparée à GetUsersForRole(), cette fonction récupère les utilisateurs indirects.

Par exemple :
g, alice, role:admin
g, role:admin, rôle:user

GetUsersForRole("role:user") ne peut obtenir que : ["role:admin"].
Mais GetImplicitUesrsForRole("role:user") obtiendra : ["role:admin", "alice"].

Par exemple :

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

GetImplicitPermissionsForUser()​

GetImplicitPermissionsForUser obtient des permissions implicites pour un utilisateur ou un rôle.
Comparé à GetPermissionsForUser(), cette fonction récupère les permissions pour les rôles hérités.

Par exemple :
p, admin, data1, read
p, alice, data2, read
g, alice, admin

GetPermissionsForUser("alice") ne peut obtenir que : [["alice", "data2", "read"]].
Mais GetImplicitPermissionsForUser("alice") obtiendra : [["admin", "data1", "read"], ["alice", "data2", "read"]].

Par exemple :

e.GetImplicitPermissionsForUser("alice")

GetNamedImplicitPermissionsForUser()​

GetNamedImplicitPermissionsForUser obtient des permissions implicites pour un utilisateur ou un rôle par la politique nommée Comparée à GetImplicitPermissionsForUser(), cette fonction vous permet de spécifier le nom de la politique.

Par exemple : p, admin, data1, read p2, admin, create g, alice, admin

GetImplicitPermissionsForUser("alice") n'obtient que : [["admin", "data1", "read"]], dont la politique est par défaut "p"

Mais vous pouvez spécifier la politique comme "p2" pour obtenir : [["admin", "create"]] par GetNamedImplicitPermissionsForUser("p2","alice")

Par exemple :

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

GetDomainsForUser()​

GetDomainsForUser récupère tous les domaines qu'un utilisateur possède.

Par exemple : p, admin, domain1, data1, read p, admin, domain2, data2, read p, admin, domain2, data2, écrire g, alice, admin, domain1 g, alice, admin, domain2

GetDomainsForUser("alice") pourrait obtenir ["domain1", "domain2"]

Par exemple :

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

GetImplicitResourcesForUser()​

GetImplicitResourcesForUser renvoie toutes les politiques qui devraient être vraies pour l'utilisateur.

Par exemple :

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

g, alice, data2_admin

GetImplicitResourcesForUser("alice") retournera [[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")
note

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