Beego ORM adapter for Casbin

Clone this repo:
  1. 40b94f3 feat: Using NewAdapter will reset all tables already registered in default (#29) by yxrxy · 8 months ago master v3.3.0
  2. 164ff79 docs: fix broken links (#27) by YunShu · 2 years, 7 months ago
  3. 28cad69 feat: custom table name (#26) by 鱼竿钓鱼干 · 2 years, 7 months ago v3.2.0
  4. dda19d2 feat: AddPolicies(), RemovePolicies() (#24) by 鱼竿钓鱼干 · 3 years, 1 month ago v3.1.0
  5. 36469c7 fix: sync default db name (#18) by Bingchang Chen · 4 years, 2 months ago v3.0.2

Beego ORM Adapter Go Coverage Status Godoc

Note: the last version that supports Beego v1 is: https://github.com/casbin/beego-orm-adapter/releases/tag/v2.0.2 . Beego v2 is supported starting from v3.0.0

Beego ORM Adapter is the Beego ORM adapter for Casbin. With this library, Casbin can load policy from Beego ORM supported database or save policy to it.

Based on Beego ORM Support, The current supported databases are:

Installation

go get github.com/casbin/beego-orm-adapter/v2

Simple Example

package main

import (
    "log"

    beegoormadapter "github.com/casbin/beego-orm-adapter/v3"
    "github.com/casbin/casbin/v2"
    _ "github.com/go-sql-driver/mysql"
)

func main() {
    // Initialize a Beego ORM adapter and use it in a Casbin enforcer:
    a, err := beegoormadapter.NewAdapter("casbin", "mysql", "mysql_username:mysql_password@tcp(127.0.0.1:3306)/dbname") // Your driver and data source. 
    if err != nil {
        log.Fatalln(err)
    }

    e, err := casbin.NewEnforcer("examples/rbac_model.conf", a)
    if err != nil {
        log.Fatalln(err)
    }
    // Check the permission.
    e.Enforce("alice", "data1", "read")

    // Modify the policy.
    // e.AddPolicy(...)
    // e.RemovePolicy(...)

    // Save the policy back to DB.
    e.SavePolicy()
}

Custom Table Name

Beego ORM using TableNameI interface to customize the table name

reference: custom-table-name

You can customize the name of the table by NewAdapterWithTableName, and query the custom table name through GetFullTableName

func testCustomTableName(t *testing.T, a *Adapter, expectTableName string) {
    actualTableName := a.GetFullTableName()
    if actualTableName != expectTableName {
        t.Error("actual table name: ", a.GetFullTableName(), ", supposed to be ", expectTableName)
    }
}

func TestAdapterCustomTableName(t *testing.T) {
    a, err := NewAdapterWithTableName("customtablename", "mysql", "root:@tcp(127.0.0.1:3306)/casbin_test", "my_casbin", "prefix_")
    if err != nil {
        t.Fatal(err)
    }
    testCustomTableName(t, a, "prefix_my_casbin")
    testSaveLoad(t, a)
    testAutoSave(t, a)
}

Note: Currently, only one custom table name is supported, and no other table name should be used after the first use of NewAdapterWithTableName

Getting Help

License

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