Passer au contenu principal

RBAC API

Une API plus conviviale pour RBAC. Cette API est un sous-ensemble de l'API de gestion. Les utilisateurs RBAC pourraient utiliser cette API pour simplifier le code.

Référence

La variable globale e est une instance de Enforcer.

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

GetRolesForUser()

GetRolesForUser obtient les rôles qu'un utilisateur a.

Par exemple:

res := e.GetRolesForUser("alice")

GetUsersForRole()

GetUsersForRole obtient 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 à 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 à un utilisateur. Renvoie false si l'utilisateur a déjà l'un de ces rôles (aka non affecté).

Par exemple:

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

DeleteRoleForUser()

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

DeleteRolesForUser supprime tous les rôles pour un utilisateur. Renvoie false si l'utilisateur n'a aucun rôle (aka non affecté).

Par exemple:

e.DeleteRolesForUser("alice")

DeleteUser()

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

Par exemple:

e.DeleteUser("alice")

DeleteRole()

DeleteRole supprime 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ée).

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à l'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()

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

DeletePermissionsForUser supprime les permissions pour un utilisateur ou un rôle. Renvoie false si l'utilisateur ou le rôle n'a aucune permission (aka non affecté).

Par exemple:

e.DeletePermissionsForUser("bob")

GetPermissionsForUser()

GetPermissionsForUser obtient les permissions 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 les rôles implicites qu'un utilisateur a. Comparé à 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, role:user

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

Par exemple:

e.GetImplicitRolesForUser("alice")

GetImplicitUsersForRole()

GetImplicitUsersForRole obtient tous les utilisateurs héritant du rôle. Comparé à GetUsersForRole(), cette fonction récupère les utilisateurs indirects.

Par exemple:

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

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

Par exemple :

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

GetImplicitPermissionsForUser()

GetImplicitPermissionsForUser obtient les 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 les permissions implicites pour un utilisateur ou un rôle par politique nommée. Comparé à 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"]] avec GetNamedImplicitPermissionsForUser("p2","alice")

Par exemple :

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

GetDomainsForUser()

GetDomainsForUser obtient tous les domaines qu'un utilisateur possède.

Par exemple :

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") 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") renverra [[alice data1 read] [alice data2 read] [alice data2 write]]

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

GetImplicitUsersForPermission()

GetImplicitUsersForPermission obtient les utilisateurs implicites pour une permission.

Par exemple :

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

GetImplicitUsersForPermission("data1", "read") renverra : ["alice", "bob"].

Note : seuls les utilisateurs seront renvoyés, les rôles (2ème argument dans "g") seront exclus.

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

GetAllowedObjectConditions()

GetAllowedObjectConditions renvoie un tableau de chaînes de conditions d'objet auxquelles l'utilisateur peut accéder.

Par exemple :

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.") renverra ["price < 25", "category_id = 2"], nil

Note :

  1. préfixe: Vous pouvez personnaliser le préfixe des conditions de l'objet, et "r.obj." est couramment utilisé comme préfixe. Après avoir supprimé le préfixe, la partie restante est la condition de l'objet. S'il y a une politique obj qui ne répond pas à l'exigence du préfixe, une errors.ERR_OBJ_CONDITION sera renvoyée.

  2. Si le tableau 'objectConditions' est vide, renvoie errors.ERR_EMPTY_CONDITION. Cette erreur est renvoyée parce que certains adaptateurs de données ORM renvoient par défaut des données de table complètes lorsqu'ils reçoivent une condition vide, ce qui a tendance à se comporter contrairement aux attentes. (par exemple, GORM) Si vous utilisez un adaptateur qui ne se comporte pas de cette façon, vous pouvez choisir d'ignorer cette erreur.

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

GetImplicitUsersForResource()

GetImplicitUsersForResource renvoie un utilisateur implicite basé sur la ressource.

Par exemple:

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

GetImplicitUsersForResource("data2") renverra ["bob", "data2", "write"], ["alice", "data2", "read"] ["alice", "data2", "write"]], nil.

GetImplicitUsersForResource("data1") renverra ["alice", "data1", "read"]], nil.

ImplicitUsers, err := e.GetImplicitUsersForResource("data2")
note

Seuls les utilisateurs seront renvoyés, les rôles (2ème argument dans "g") seront exclus.

GetNamedImplicitUsersForResource()

GetNamedImplicitUsersForResource return implicit user based on resource with named policy support. This function handles resource role relationships through named policies (e.g., g2, g3, etc.).

For example:

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