Passer au contenu principal

Commencer

Installation​

allez obtenir github.com/casbin/casbin/v2

Un nouveau responsable de Casbin​

Casbin uses configuration files to define the access control model.

There are two configuration files: model.conf and policy.csv. model.conf stores the access model, while policy.csv stores the specific user permission configuration. The usage of Casbin is very straightforward. We only need to create one main structure: enforcer. Lors de la construction de cette structure, model.conf et policy.csv seront chargés.

In other words, to create a Casbin enforcer, you need to provide a Model and an Adapter.

Casbin provides a FileAdapter that you can use. See Adapter for more information.

  • Example of using the Model file and the default 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.1:3306)/")
if err != nil {
log.Fatalf("error: adapter: %s", err)
}

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

[policy_definition]
p = sub, obj, act

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

[matchers]
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act
`)
if err != nil {
log.Fatalf("error: model: %s", err)
}

e, err := casbin.NewEnforcer(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.