Go client for Casbin-Server

Clone this repo:
  1. b7ea435 feat: improve the README (#30) by yxrxy · 8 months ago master v1.3.0
  2. 4b320ca feat: add enforcer EnableAcceptJsonRequest feature, upgrade casbin to v2.100.0 (#29) by Shokoohi · 1 year, 5 months ago v1.2.0
  3. 2f9c0f9 feat: fix Node engine version after installing new version of Node (#27) by Shokoohi · 1 year, 5 months ago v1.1.0
  4. 0747ebe feat: upgrade CI Node.js version to 20 (#26) by Shokoohi · 1 year, 5 months ago
  5. 46cd3a8 feat: update CI Go version to 1.19 by Yang Luo · 1 year, 5 months ago

Go client for Casbin Server

Go Report Card GitHub Actions Go Reference Release Discord Sourcegraph

casbin-go-client is Golang's client for Casbin-Server. Casbin-Server is the Access Control as a Service (ACaaS) solution based on Casbin.

Installation

go mod init your-project
go mod tidy

Quick Start

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
}

License

This project is under Apache 2.0 License. See the LICENSE file for the full license text.