Zum Hauptinhalt springen

RBAC API

Eine benutzerfreundlichere API für RBAC. Diese API ist eine Teilmenge der Management API. Die RBAC-Benutzer könnten diese API verwenden, um den Code zu vereinfachen.

Referenz

Die globale Variable e ist eine Enforcer-Instanz.

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

GetRolesForUser()

GetRolesForUser erhält die Rollen, die ein Benutzer hat.

Zum Beispiel:

res := e.GetRolesForUser("alice")

GetUsersForRole()

GetUsersForRole erhält die Benutzer, die eine Rolle haben.

Zum Beispiel:

res := e.GetUsersForRole("data1_admin")

HasRoleForUser()

HasRoleForUser bestimmt, ob ein Benutzer eine Rolle hat.

Zum Beispiel:

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

AddRoleForUser()

AddRoleForUser fügt einem Benutzer eine Rolle hinzu. Gibt false zurück, wenn der Benutzer die Rolle bereits hat (auch bekannt als nicht betroffen).

Zum Beispiel:

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

AddRolesForUser()

AddRolesForUser fügt einem Benutzer mehrere Rollen hinzu. Gibt false zurück, wenn der Benutzer bereits eine dieser Rollen hat (auch bekannt als nicht betroffen).

Zum Beispiel:

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

DeleteRoleForUser()

DeleteRoleForUser löscht eine Rolle für einen Benutzer. Gibt false zurück, wenn der Benutzer die Rolle nicht hat (auch bekannt als nicht betroffen).

Zum Beispiel:

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

DeleteRolesForUser()

DeleteRolesForUser löscht alle Rollen für einen Benutzer. Gibt false zurück, wenn der Benutzer keine Rollen hat (auch bekannt als nicht betroffen).

Zum Beispiel:

e.DeleteRolesForUser("alice")

DeleteUser()

DeleteUser löscht einen Benutzer. Gibt false zurück, wenn der Benutzer nicht existiert (auch bekannt als nicht betroffen).

Zum Beispiel:

e.DeleteUser("alice")

DeleteRole()

DeleteRole löscht eine Rolle.

Zum Beispiel:

e.DeleteRole("data2_admin")

DeletePermission()

DeletePermission löscht eine Berechtigung. Gibt false zurück, wenn die Berechtigung nicht existiert (auch bekannt als nicht betroffen).

Zum Beispiel:

e.DeletePermission("read")

AddPermissionForUser()

AddPermissionForUser fügt eine Berechtigung für einen Benutzer oder eine Rolle hinzu. Gibt false zurück, wenn der Benutzer oder die Rolle bereits die Berechtigung hat (auch bekannt als nicht betroffen).

Zum Beispiel:

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

AddPermissionsForUser()

AddPermissionsForUser fügt mehrere Berechtigungen für einen Benutzer oder eine Rolle hinzu. Gibt false zurück, wenn der Benutzer oder die Rolle bereits eine der Berechtigungen hat (auch bekannt als nicht betroffen).

Zum Beispiel:

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

DeletePermissionForUser()

DeletePermissionForUser löscht eine Berechtigung für einen Benutzer oder eine Rolle. Gibt false zurück, wenn der Benutzer oder die Rolle die Berechtigung nicht hat (auch bekannt als nicht betroffen).

Zum Beispiel:

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

DeletePermissionsForUser()

DeletePermissionsForUser löscht Berechtigungen für einen Benutzer oder eine Rolle. Gibt false zurück, wenn der Benutzer oder die Rolle keine Berechtigungen hat (auch bekannt als nicht betroffen).

Zum Beispiel:

e.DeletePermissionsForUser("bob")

GetPermissionsForUser()

GetPermissionsForUser holt Berechtigungen für einen Benutzer oder eine Rolle.

Zum Beispiel:

e.GetPermissionsForUser("bob")

HasPermissionForUser()

HasPermissionForUser bestimmt, ob ein Benutzer eine Berechtigung hat.

Zum Beispiel:

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

GetImplicitRolesForUser()

GetImplicitRolesForUser holt implizite Rollen, die ein Benutzer hat. Im Vergleich zu GetRolesForUser() holt diese Funktion indirekte Rollen neben direkten Rollen.

Zum Beispiel:

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

GetRolesForUser("alice") kann nur bekommen: ["role:admin"].\ Aber GetImplicitRolesForUser("alice") wird bekommen: ["role:admin", "role:user"].

Zum Beispiel:

e.GetImplicitRolesForUser("alice")

GetImplicitUsersForRole()

GetImplicitUsersForRole holt alle Benutzer, die die Rolle erben. Im Vergleich zu GetUsersForRole() holt diese Funktion indirekte Benutzer.

Zum Beispiel:

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

GetUsersForRole("role:user") kann nur bekommen: ["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. Präfix: Sie können das Präfix der Objektbedingungen anpassen, und "r.obj." wird häufig als Präfix verwendet. Nach dem Entfernen des Präfixes ist der verbleibende Teil die Bedingung des Objekts. Wenn es eine obj-Richtlinie gibt, die die Präfixanforderung nicht erfüllt, wird ein errors.ERR_OBJ_CONDITION zurückgegeben.

  2. Wenn das Array 'objectConditions' leer ist, geben Sie errors.ERR_EMPTY_CONDITION zurück. Dieser Fehler wird zurückgegeben, weil einige Datenadapter-ORM standardmäßig vollständige Tabellendaten zurückgeben, wenn sie eine leere Bedingung erhalten, was sich oft entgegen den Erwartungen verhält (z.B. GORM). Wenn Sie einen Adapter verwenden, der sich nicht so verhält, können Sie diesen Fehler ignorieren.

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

GetImplicitUsersForResource()

GetImplicitUsersForResource gibt impliziten Benutzer basierend auf Ressource zurück.

Zum Beispiel:

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

GetImplicitUsersForResource("data2") wird ["bob", "data2", "write"], ["alice", "data2", "read"] ["alice", "data2", "write"]], nil zurückgeben.

GetImplicitUsersForResource("data1") wird ["alice", "data1", "read"]], nil zurückgeben.

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

Es werden nur Benutzer zurückgegeben, Rollen (2. Argument in "g") werden ausgeschlossen.