The sql-adapter
is a database/sql
adapter for Casbin v2.
With this library, Casbin can load policy lines or save policy lines from supported databases.
- SQLite3: modernc.org/sqlite
- MySQL(v8): github.com/go-sql-driver/mysql
- PostgreSQL(v15): github.com/lib/pq
- SQL Server(v2017): github.com/microsoft/go-mssqldb
- Oracle(v11.2): github.com/mattn/go-oci8
go get github.com/Blank-Xu/sql-adapter
package main
import (
"database/sql"
"log"
"runtime"
"time"
sqladapter "github.com/Blank-Xu/sql-adapter"
"github.com/casbin/casbin/v2"
_ "github.com/go-sql-driver/mysql"
)
func finalizer(db *sql.DB) {
if db == nil {
return
}
err := db.Close()
if err != nil {
panic(err)
}
}
func main() {
// connect to the database first.
db, err := sql.Open("mysql", "root:YourPassword@tcp(127.0.0.1:3306)/YourDBName")
if err != nil {
panic(err)
}
if err = db.Ping();err!=nil{
panic(err)
}
db.SetMaxOpenConns(20)
db.SetMaxIdleConns(10)
db.SetConnMaxLifetime(time.Minute * 10)
// need to control by user, not the package
runtime.SetFinalizer(db, finalizer)
// Initialize an adapter and use it in a Casbin enforcer:
// The adapter will use the SQLite3 table name "casbin_rule_test",
// the default table name is "casbin_rule".
// If it doesn't exist, the adapter will create it automatically.
a, err := sqladapter.NewAdapter(db, "mysql", "casbin_rule_test")
if err != nil {
panic(err)
}
e, err := casbin.NewEnforcer("test/testdata/rbac_model.conf", a)
if err != nil {
panic(err)
}
// Load the policies from DB.
if err = e.LoadPolicy(); err != nil {
log.Println("LoadPolicy failed, err: ", err)
}
// Check the permission.
has, err := e.Enforce("alice", "data1", "read")
if err != nil {
log.Println("Enforce failed, err: ", err)
}
if !has {
log.Println("do not have permission")
}
// Modify the policy.
// e.AddPolicy(...)
// e.RemovePolicy(...)
// Save the policy back to DB.
if err = e.SavePolicy(); err != nil {
log.Println("SavePolicy failed, err: ", err)
}
}
This project is under Apache 2.0 License. See the LICENSE file for the full license text.