pgxadapter

package module
v0.0.0-...-10cefcb Latest Latest
Warning

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

Go to latest
Published: Feb 12, 2026 License: GPL-3.0 Imports: 12 Imported by: 0

README

Pgx Adapter for Casbin

  • Full Casbin Interface Support: Implements Adapter, ContextAdapter, FilteredAdapter, ContextFilteredAdapter, BatchAdapter, ContextBatchAdapter, UpdatableAdapter, and ContextUpdatableAdapter.
  • Powered by Pgx: Utilizes the high-performance pgx driver for PostgreSQL.
  • Customizable Column Length: Allows configuration of the number of policy rule columns (v0, v1, ..., vn). Default is 6 (ptype, v0-v5).
  • Customizable Table Name: Allows configuration of the database table name. Default is casbin_rule.

Usage

Here's a basic example of how to use the Pgx Adapter:

// filepath: examples/main.go
package main

import (
    "context"
    "log"

    "github.com/casbin/casbin/v2"
    pgxadapter "github.com/gtoxlili/pgx-adapter" // Assuming this is the module path
    "github.com/jackc/pgx/v5/pgxpool"
)

func main() {
    // Initialize pgx connection pool
    // Replace with your actual database connection string
    dbURL := "postgres://user:password@host:port/database"
    dbpool, err := pgxpool.New(context.Background(), dbURL)
    if err != nil {
        log.Fatalf("Unable to connect to database: %v\n", err)
    }
    defer dbpool.Close()

    // Create an adapter instance
    // Default table name is "casbin_rule", default field count is 6
    // To customize, use options:
    // a, err := pgxadapter.NewAdapter(context.Background(), dbpool,
    //     pgxadapter.WithTableName("my_policy_rules"),
    //     pgxadapter.WithFieldCount(8), // For ptype, v0-v7
    // )
    a, err := pgxadapter.NewAdapter(context.Background(), dbpool)
    if err != nil {
        log.Fatalf("Failed to create adapter: %v", err)
    }

    // ... use the enforcer
}

The adapter will automatically create the policy table (default name: casbin_rule) if it doesn't exist. The table structure will adapt based on the WithFieldCount option.

License

This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.

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
}

func NewAdapter

func NewAdapter(ctx context.Context, db interface {
	driver.Pinger
	Commander
}, opts ...Option) (*Adapter, error)

func (*Adapter) AddPolicies

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

func (*Adapter) AddPoliciesCtx

func (a *Adapter) AddPoliciesCtx(ctx context.Context, sec string, ptype string, rules [][]string) error

func (*Adapter) AddPolicy

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

func (*Adapter) AddPolicyCtx

func (a *Adapter) AddPolicyCtx(ctx context.Context, sec string, ptype string, rule []string) error

func (*Adapter) IsFiltered

func (a *Adapter) IsFiltered() bool

func (*Adapter) IsFilteredCtx

func (a *Adapter) IsFilteredCtx(ctx context.Context) bool

func (*Adapter) LoadFilteredPolicy

func (a *Adapter) LoadFilteredPolicy(model model.Model, filter interface{}) error

func (*Adapter) LoadFilteredPolicyCtx

func (a *Adapter) LoadFilteredPolicyCtx(ctx context.Context, model model.Model, filter interface{}) error

func (*Adapter) LoadPolicy

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

func (*Adapter) LoadPolicyCtx

func (a *Adapter) LoadPolicyCtx(ctx context.Context, model model.Model) error

func (*Adapter) RemoveFilteredPolicy

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

func (*Adapter) RemoveFilteredPolicyCtx

func (a *Adapter) RemoveFilteredPolicyCtx(ctx context.Context, sec string, ptype string, fieldIndex int, fieldValues ...string) error

func (*Adapter) RemovePolicies

func (a *Adapter) RemovePolicies(sec string, ptype string, rules [][]string) error

func (*Adapter) RemovePoliciesCtx

func (a *Adapter) RemovePoliciesCtx(ctx context.Context, sec string, ptype string, rules [][]string) error

func (*Adapter) RemovePolicy

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

func (*Adapter) RemovePolicyCtx

func (a *Adapter) RemovePolicyCtx(ctx context.Context, sec string, ptype string, rule []string) error

func (*Adapter) SavePolicy

func (a *Adapter) SavePolicy(model model.Model) error

func (*Adapter) SavePolicyCtx

func (a *Adapter) SavePolicyCtx(ctx context.Context, model model.Model) error

func (*Adapter) UpdateFilteredPolicies

func (a *Adapter) UpdateFilteredPolicies(sec string, ptype string, newRules [][]string, fieldIndex int, fieldValues ...string) ([][]string, error)

func (*Adapter) UpdateFilteredPoliciesCtx

func (a *Adapter) UpdateFilteredPoliciesCtx(ctx context.Context, sec string, ptype string, newRules [][]string, fieldIndex int, fieldValues ...string) ([][]string, error)

UpdateFilteredPoliciesCtx deletes old rules and adds new rules.

func (*Adapter) UpdatePolicies

func (a *Adapter) UpdatePolicies(sec string, ptype string, oldRules, newRules [][]string) error

func (*Adapter) UpdatePoliciesCtx

func (a *Adapter) UpdatePoliciesCtx(ctx context.Context, sec string, ptype string, oldRules, newRules [][]string) error

func (*Adapter) UpdatePolicy

func (a *Adapter) UpdatePolicy(sec string, ptype string, oldRule, newRule []string) error

func (*Adapter) UpdatePolicyCtx

func (a *Adapter) UpdatePolicyCtx(ctx context.Context, sec string, ptype string, oldRule, newRule []string) error

type Commander

type Commander interface {
	Begin(context.Context) (pgx.Tx, error)
	SendBatch(context.Context, *pgx.Batch) pgx.BatchResults
	Exec(ctx context.Context, sql string, arguments ...any) (pgconn.CommandTag, error)
	Query(ctx context.Context, sql string, args ...any) (pgx.Rows, error)
	QueryRow(ctx context.Context, sql string, args ...any) pgx.Row
}

type Option

type Option func(*Adapter)

func WithFieldCount

func WithFieldCount(fieldCount int) Option

func WithNoRowsAffectedError

func WithNoRowsAffectedError(err error) Option

WithNoRowsAffectedError 当 受影响的行数 为 0 时,返回的错误(默认为 nil)

func WithTableName

func WithTableName(tableName string) Option

Jump to

Keyboard shortcuts

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