sqladapter

package module
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 28, 2023 License: Apache-2.0 Imports: 9 Imported by: 14

README

sql-adapter

Go Report Card Build Status Coverage Status PkgGoDev Release Sourcegraph License


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.

Tested Databases

master branch
oracle branch

Installation

 go get github.com/Blank-Xu/sql-adapter

Simple Example

MySQL
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("examples/rbac_model.conf", a)
    if err != nil {
        panic(err)
    }

    // Load the policy 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)
    }
}

Getting Help

License

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

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Adapter

type Adapter struct {
	// contains filtered or unexported fields
}

Adapter defines the database adapter for Casbin. It can load policy lines from connected database or save policy lines.

func NewAdapter

func NewAdapter(db *sql.DB, driverName, tableName string) (*Adapter, error)

NewAdapter the constructor for Adapter. db should connected to database and controlled by user. If tableName == "", the Adapter will automatically create a table named "casbin_rule".

func NewAdapterWithContext

func NewAdapterWithContext(ctx context.Context, db *sql.DB, driverName, tableName string) (*Adapter, error)

NewAdapterWithContext the constructor for Adapter. db should connected to database and controlled by user. If tableName == "", the Adapter will automatically create a table named "casbin_rule".

func (Adapter) AddPolicies

func (adapter Adapter) AddPolicies(sec string, ptype string, rules [][]string) error

AddPolicies add multiple policy rules to the storage.

func (Adapter) AddPolicy

func (adapter Adapter) AddPolicy(sec string, ptype string, rule []string) error

AddPolicy add one policy rule to the storage.

func (Adapter) IsFiltered

func (adapter Adapter) IsFiltered() bool

IsFiltered returns true if the loaded policy rules has been filtered.

func (*Adapter) LoadFilteredPolicy

func (adapter *Adapter) LoadFilteredPolicy(model model.Model, filterPtr interface{}) error

LoadFilteredPolicy load policy rules that match the Filter. filterPtr must be a pointer.

func (*Adapter) LoadPolicy

func (adapter *Adapter) LoadPolicy(model model.Model) error

LoadPolicy load all policy rules from the storage.

func (Adapter) RemoveFilteredPolicy

func (adapter Adapter) RemoveFilteredPolicy(sec string, ptype string, fieldIndex int, fieldValues ...string) error

RemoveFilteredPolicy remove policy rules that match the filter from the storage.

func (Adapter) RemovePolicies

func (adapter Adapter) RemovePolicies(sec string, ptype string, rules [][]string) (err error)

func (Adapter) RemovePolicy

func (adapter Adapter) RemovePolicy(sec, ptype string, rule []string) error

RemovePolicy remove policy rules from the storage.

func (Adapter) SavePolicy

func (adapter Adapter) SavePolicy(model model.Model) error

SavePolicy save policy rules to the storage.

func (Adapter) UpdateFilteredPolicies

func (adapter Adapter) UpdateFilteredPolicies(sec, ptype string, newPolicies [][]string, fieldIndex int, fieldValues ...string) (oldPolicies [][]string, err error)

UpdateFilteredPolicies deletes old rules and adds new rules.

func (Adapter) UpdatePolicies

func (adapter Adapter) UpdatePolicies(sec, ptype string, oldRules, newRules [][]string) (err error)

UpdatePolicies updates policy rules to storage.

func (Adapter) UpdatePolicy

func (adapter Adapter) UpdatePolicy(sec, ptype string, oldRule, newPolicy []string) error

UpdatePolicy update a policy rule from storage. This is part of the Auto-Save feature.

type Filter

type Filter struct {
	PType []string
	V0    []string
	V1    []string
	V2    []string
	V3    []string
	V4    []string
	V5    []string
}

Filter define the filtering rules for a FilteredAdapter's policy. Empty values are ignored, but all others must match the Filter.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL