Passer au contenu principal

Get Started

Installation

go get github.com/casbin/casbin/v2

Nouveau renforcement Casbin

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

Il y a deux fichiers de configuration: model.conf et policy.csv. model.conf stocke le modèle d'accès, tandis que policy.csv stocke la configuration spécifique des permissions de l'utilisateur. L'utilisation de Casbin est très simple. Nous avons seulement besoin de créer une structure principale: enforcer. Lors de la construction de cette structure, model.conf et policy.csv seront chargés.

En d'autres termes, pour créer un renforcement Casbin, vous devez fournir un Modèle et un Adaptateur.

Casbin fournit un FileAdapter que vous pouvez utiliser. Voir Adapter pour plus d'informations.

  • Exemple d'utilisation du fichier Modèle et de l'FileAdapter par défaut:
import "github.com/casbin/casbin/v2"

e, err := casbin.NewEnforcer("path/to/model.conf", "path/to/policy.csv")
  • Utilisez le texte du Modèle avec un autre Adaptateur:
import (
"log"

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

// Initialize a Xorm adapter with MySQL database.
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 permissions

Ajoutez un crochet d'exécution dans votre code juste avant que l'accès ne se produise:

sub := "alice" // the user that wants to access a resource.
obj := "data1" // the resource that is going to be accessed.
act := "read" // the operation that the user performs on the resource.

ok, err := e.Enforce(sub, obj, act)

if err != nil {
// handle err
}

if ok == true {
// permit alice to read data1
} else {
// deny the request, show an error
}

// You could use BatchEnforce() to enforce some requests in batches.
// This method returns a bool slice, and this slice's index corresponds to the row index of the two-dimensional array.
// e.g. results[0] is the result of {"alice", "data1", "read"}
results, err := e.BatchEnforce([][]interface{}{{"alice", "data1", "read"}, {"bob", "data2", "write"}, {"jack", "data3", "read"}})

Casbin fournit également une API pour la gestion des permissions en temps réel. Par exemple, vous pouvez obtenir tous les rôles attribués à un utilisateur comme ci-dessous:

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

Voir API de gestion et API RBAC pour plus d'utilisation.

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