Passer au contenu principal

Commencer

Installation​

allez obtenir github.com/casbin/casbin/v2

Un nouveau responsable de Casbin​

Casbin utilise des fichiers de configuration pour définir le modÚle de contrÎle d'accÚs.

Il a deux fichiers de configuration, model.conf et policy.csv. Parmi eux, model.conf stocke notre modÚle d'accÚs, et policy.csv stocke notre configuration spécifique de permission d'utilisateur. L'utilisation de Casbin est trÚs raffinée. Fondamentalement, nous avons juste besoin d'une structure principale : enforcecer. Lors de la construction de cette structure, model.conf et policy.csv seront chargés.

En un autre mot, pour un nouvel agent de sécurité Casbin, vous devez fournir un modÚle et un adaptateur.

Casbin a un FileAdapter, voir Adapter de plus d'Adaptateur.

  • Utiliser le fichier modĂšle et la valeur par dĂ©faut FileAdapter:
import "github.com/casbin/casbin/v2"

e, err := casbin.NewEnforcer("path/to/model.conf", "path/to/policy.csv")
  • Utiliser le texte du modĂšle avec un autre adaptateur:
import (
"log"

"github.com/casbin/casbin/v2"
"github.com/casbin/casbin/casbin/v2/model"
xormadapter "github.com/casbin/xorm-adapter/v2"
_ "github.com/go-sql-driver/mysql"
)

// Initialise un adaptateur Xorm avec une base de données MySQL.
a, err := xormadapter.NewAdapter("mysql", "mysql_username:mysql_password@tcp(127.0.0. :3306)/casbin")
if err != nil {
log.Fatalf("error: adapter: %s", err)
}

m, err := model. ewModelFromString(`
[request_definition]
r = sub, obj, act

[policy_definition]
p = sub, obj, act

[policy_effect]
e = some(where (p. ft == allow))

[matchers]
m = r.sub == p.sub && r.obj == p. bj && r.act == p.act
`)
if err != nil {
log. atalf("erreur: modĂšle : %s", err)
}

e, err := casbin. ewEnforcer(m, a)
if err != nil {
log.Fatalf("error: enforcer: %s", err)
}

VĂ©rifier les autorisations​

Ajoutez un crochet d'application Ă  votre code juste avant que l'accĂšs ne se produise :

sub := "alice" // l'utilisateur qui veut accéder à une ressource.
obj := "data1" // la ressource qui va ĂȘtre accĂ©dĂ©e.
act := "read" // l'opération que l'utilisateur effectue sur la ressource.

ok, erreur := e. nforce(sub, obj, act)

si erreur! nil {
// handle err
}

if ok == true {
// autorise alice à lire les données 1
} else {
// refuse la requĂȘte, affiche une erreur
}

// Vous pouvez utiliser BatchEnforce() pour imposer certaines requĂȘtes en lots.
// Cette méthode retourne une tranche de booléen, et l'index de cette tranche correspond à l'index de ligne du tableau en deux dimensions.
// par exemple les résultats[0] sont le résultat de {"alice", "data1", "read"}
résultats, erreur:= e.BatchEnforce([][]interface{}{{"alice", "data1", "read"}, {"bob", "data2", "write"}, {"jack", "data3", "read"}})

Casbin fournit également une API pour la gestion des permissions à l'exécution. Par exemple, vous pouvez obtenir tous les rÎles assignés à un utilisateur comme ci-dessous:

roles, err := e.GetRolesForUser("alice")

Voir Management API et RBAC API pour plus d'utilisation.

Veuillez vous référer aux cas de test pour plus d'usage.