casbin-go-client
is Golang's client for Casbin-Server. Casbin-Server
is the Access Control as a Service (ACaaS)
solution based on Casbin.
go mod init your-project
go mod tidy
First, start the casbin-server:
# Install casbin-server
go install github.com/casbin/casbin-server@latest
# Start the server
casbin-server
Then use the client:
package main
import (
"context"
"fmt"
"log"
"github.com/casbin/casbin-go-client/client"
"google.golang.org/grpc"
)
func main() {
// Create client with insecure connection
c, err := client.NewClient(context.Background(), "127.0.0.1:50051", grpc.WithInsecure())
if err != nil {
log.Fatal(err)
}
// Define RBAC model
modelText := `
[request_definition]
r = sub, obj, act
[policy_definition]
p = sub, obj, act
[role_definition]
g = _, _
[policy_effect]
e = some(where (p.eft == allow))
[matchers]
m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act
`
// Create enforcer
enforcer, err := c.NewEnforcer(context.Background(), client.Config{
ModelText: modelText,
})
if err != nil {
log.Fatal(err)
}
// Add policy
enforcer.AddPolicy(context.Background(), "alice", "data1", "read")
// Check permission
allowed, err := enforcer.Enforce(context.Background(), "alice", "data1", "read")
if err != nil {
log.Fatal(err)
}
fmt.Printf("alice can read data1: %v\n", allowed) // true
}
This project is under Apache 2.0 License. See the LICENSE file for the full license text.