Skip to content

Commit fba7b11

Browse files
authored
Merge pull request #31 from closetool/tablename
fix: support pg v10
2 parents 4c48282 + 7b7b71d commit fba7b11

5 files changed

Lines changed: 187 additions & 90 deletions

File tree

.github/workflows/ci.yml

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
name: Go
22

33
on:
4-
push:
5-
branches: [ master ]
6-
pull_request:
7-
branches: [ master ]
4+
- push
5+
- pull_request
86

97
jobs:
108

adapter.go

Lines changed: 38 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,30 @@
11
package pgadapter
22

33
import (
4+
"context"
45
"fmt"
56
"strings"
67

78
"github.com/casbin/casbin/v2/model"
89
"github.com/casbin/casbin/v2/persist"
9-
"github.com/go-pg/pg/v9"
10-
"github.com/go-pg/pg/v9/orm"
11-
"github.com/go-pg/pg/v9/types"
10+
"github.com/go-pg/pg/v10"
11+
"github.com/go-pg/pg/v10/orm"
1212
"github.com/mmcloughlin/meow"
1313
)
1414

15+
const DefaultTableName = "casbin_rule"
16+
1517
// CasbinRule represents a rule in Casbin.
1618
type CasbinRule struct {
17-
ID string
18-
PType string
19-
V0 string
20-
V1 string
21-
V2 string
22-
V3 string
23-
V4 string
24-
V5 string
19+
tableName struct{} `pg:"_"`
20+
ID string
21+
PType string
22+
V0 string
23+
V1 string
24+
V2 string
25+
V3 string
26+
V4 string
27+
V5 string
2528
}
2629

2730
type Filter struct {
@@ -48,7 +51,7 @@ func NewAdapter(arg interface{}) (*Adapter, error) {
4851
return nil, fmt.Errorf("pgadapter.NewAdapter: %v", err)
4952
}
5053

51-
a := &Adapter{db: db}
54+
a := &Adapter{db: db, tableName: DefaultTableName}
5255

5356
if err := a.createTableifNotExists(); err != nil {
5457
return nil, fmt.Errorf("pgadapter.NewAdapter: %v", err)
@@ -60,17 +63,11 @@ func NewAdapter(arg interface{}) (*Adapter, error) {
6063
// NewAdapterByDB creates new Adapter by using existing DB connection
6164
// creates table from CasbinRule struct if it doesn't exist
6265
func NewAdapterByDB(db *pg.DB, opts ...Option) (*Adapter, error) {
63-
a := &Adapter{db: db}
66+
a := &Adapter{db: db, tableName: DefaultTableName}
6467
for _, opt := range opts {
6568
opt(a)
6669
}
6770

68-
if len(a.tableName) > 0 {
69-
a.db.Model((*CasbinRule)(nil)).TableModel().Table().Name = a.tableName
70-
a.db.Model((*CasbinRule)(nil)).TableModel().Table().FullName = (types.Safe)(a.tableName)
71-
a.db.Model((*CasbinRule)(nil)).TableModel().Table().FullNameForSelects = (types.Safe)(a.tableName)
72-
}
73-
7471
if !a.skipTableCreate {
7572
if err := a.createTableifNotExists(); err != nil {
7673
return nil, fmt.Errorf("pgadapter.NewAdapter: %v", err)
@@ -130,7 +127,7 @@ func (a *Adapter) Close() error {
130127
}
131128

132129
func (a *Adapter) createTableifNotExists() error {
133-
err := a.db.CreateTable(&CasbinRule{}, &orm.CreateTableOptions{
130+
err := a.db.Model((*CasbinRule)(nil)).Table(a.tableName).CreateTable(&orm.CreateTableOptions{
134131
Temp: false,
135132
IfNotExists: true,
136133
})
@@ -183,7 +180,7 @@ func (r *CasbinRule) String() string {
183180
func (a *Adapter) LoadPolicy(model model.Model) error {
184181
var lines []*CasbinRule
185182

186-
if err := a.db.Model(&lines).Select(); err != nil {
183+
if err := a.db.Model(&lines).Table(a.tableName).Select(); err != nil {
187184
return err
188185
}
189186

@@ -238,7 +235,7 @@ func (a *Adapter) SavePolicy(model model.Model) error {
238235
}
239236
defer tx.Close()
240237

241-
_, err = tx.Model((*CasbinRule)(nil)).Where("id IS NOT NULL").Delete()
238+
_, err = tx.Model((*CasbinRule)(nil)).Table(a.tableName).Where("id IS NOT NULL").Delete()
242239
if err != nil {
243240
return err
244241
}
@@ -259,8 +256,8 @@ func (a *Adapter) SavePolicy(model model.Model) error {
259256
}
260257
}
261258

262-
if len(lines) > 0 {
263-
_, err = tx.Model(&lines).
259+
for _, line := range lines {
260+
_, err = tx.Model(line).Table(a.tableName).
264261
OnConflict("DO NOTHING").
265262
Insert()
266263
if err != nil {
@@ -279,8 +276,9 @@ func (a *Adapter) SavePolicy(model model.Model) error {
279276
// AddPolicy adds a policy rule to the storage.
280277
func (a *Adapter) AddPolicy(sec string, ptype string, rule []string) error {
281278
line := savePolicyLine(ptype, rule)
282-
err := a.db.RunInTransaction(func(tx *pg.Tx) error {
279+
err := a.db.RunInTransaction(context.Background(), func(tx *pg.Tx) error {
283280
_, err := a.db.Model(line).
281+
Table(a.tableName).
284282
OnConflict("DO NOTHING").
285283
Insert()
286284

@@ -298,8 +296,9 @@ func (a *Adapter) AddPolicies(sec string, ptype string, rules [][]string) error
298296
lines = append(lines, line)
299297
}
300298

301-
err := a.db.RunInTransaction(func(tx *pg.Tx) error {
299+
err := a.db.RunInTransaction(context.Background(), func(tx *pg.Tx) error {
302300
_, err := tx.Model(&lines).
301+
Table(a.tableName).
303302
OnConflict("DO NOTHING").
304303
Insert()
305304
return err
@@ -311,8 +310,9 @@ func (a *Adapter) AddPolicies(sec string, ptype string, rules [][]string) error
311310
// RemovePolicy removes a policy rule from the storage.
312311
func (a *Adapter) RemovePolicy(sec string, ptype string, rule []string) error {
313312
line := savePolicyLine(ptype, rule)
314-
err := a.db.RunInTransaction(func(tx *pg.Tx) error {
315-
return a.db.Delete(line)
313+
err := a.db.RunInTransaction(context.Background(), func(tx *pg.Tx) error {
314+
_, err := a.db.Model(line).Table(a.tableName).WherePK().Delete()
315+
return err
316316
})
317317

318318
return err
@@ -326,8 +326,8 @@ func (a *Adapter) RemovePolicies(sec string, ptype string, rules [][]string) err
326326
lines = append(lines, line)
327327
}
328328

329-
err := a.db.RunInTransaction(func(tx *pg.Tx) error {
330-
_, err := tx.Model(&lines).
329+
err := a.db.RunInTransaction(context.Background(), func(tx *pg.Tx) error {
330+
_, err := tx.Model(&lines).Table(a.tableName).
331331
Delete()
332332
return err
333333
})
@@ -337,7 +337,7 @@ func (a *Adapter) RemovePolicies(sec string, ptype string, rules [][]string) err
337337

338338
// RemoveFilteredPolicy removes policy rules that match the filter from the storage.
339339
func (a *Adapter) RemoveFilteredPolicy(sec string, ptype string, fieldIndex int, fieldValues ...string) error {
340-
query := a.db.Model((*CasbinRule)(nil)).Where("p_type = ?", ptype)
340+
query := a.db.Model((*CasbinRule)(nil)).Table(a.tableName).Where("p_type = ?", ptype)
341341

342342
idx := fieldIndex + len(fieldValues)
343343
if fieldIndex <= 0 && idx > 0 && fieldValues[0-fieldIndex] != "" {
@@ -359,7 +359,7 @@ func (a *Adapter) RemoveFilteredPolicy(sec string, ptype string, fieldIndex int,
359359
query = query.Where("v5 = ?", fieldValues[5-fieldIndex])
360360
}
361361

362-
err := a.db.RunInTransaction(func(tx *pg.Tx) error {
362+
err := a.db.RunInTransaction(context.Background(), func(tx *pg.Tx) error {
363363
_, err := query.Delete()
364364
return err
365365
})
@@ -413,7 +413,7 @@ func (a *Adapter) loadFilteredPolicy(model model.Model, filter *Filter, handler
413413
if filter.P != nil {
414414
lines := []*CasbinRule{}
415415

416-
query := a.db.Model(&lines).Where("p_type = 'p'")
416+
query := a.db.Model(&lines).Table(a.tableName).Where("p_type = 'p'")
417417
query, err := buildQuery(query, filter.P)
418418
if err != nil {
419419
return err
@@ -430,7 +430,7 @@ func (a *Adapter) loadFilteredPolicy(model model.Model, filter *Filter, handler
430430
if filter.G != nil {
431431
lines := []*CasbinRule{}
432432

433-
query := a.db.Model(&lines).Where("p_type = 'g'")
433+
query := a.db.Model(&lines).Table(a.tableName).Where("p_type = 'g'")
434434
query, err := buildQuery(query, filter.G)
435435
if err != nil {
436436
return err
@@ -484,12 +484,12 @@ func (a *Adapter) UpdateFilteredPolicies(sec string, ptype string, oldRules, new
484484
newLines = append(newLines, line)
485485
}
486486

487-
err := a.db.RunInTransaction(func(tx *pg.Tx) error {
488-
_, err := tx.Model(&oldLines).Delete()
487+
err := a.db.RunInTransaction(context.Background(), func(tx *pg.Tx) error {
488+
_, err := tx.Model(&oldLines).Table(a.tableName).Delete()
489489
if err != nil {
490490
return err
491491
}
492-
_, err = tx.Model(&newLines).
492+
_, err = tx.Model(&newLines).Table(a.tableName).
493493
OnConflict("DO NOTHING").
494494
Insert()
495495
return err
@@ -506,7 +506,7 @@ func (a *Adapter) updatePolicies(oldLines, newLines []*CasbinRule) error {
506506

507507
for i, line := range oldLines {
508508
newLines[i].ID = line.ID
509-
_, err = tx.Model(newLines[i]).WherePK().Update()
509+
_, err = tx.Model(newLines[i]).Table(a.tableName).WherePK().Update()
510510
if err != nil {
511511
tx.Rollback()
512512
return err

adapter_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import (
66

77
"github.com/casbin/casbin/v2"
88
"github.com/casbin/casbin/v2/util"
9-
"github.com/go-pg/pg/v9"
9+
"github.com/go-pg/pg/v10"
1010
"github.com/stretchr/testify/suite"
1111
)
1212

go.mod

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
module github.com/casbin/casbin-pg-adapter
22

3-
go 1.13
3+
go 1.14
44

55
require (
66
github.com/casbin/casbin/v2 v2.23.4
7-
github.com/go-pg/pg/v9 v9.1.0
7+
github.com/go-pg/pg/v10 v10.9.1
88
github.com/mmcloughlin/meow v0.0.0-20181112033425-871e50784daf
9-
github.com/stretchr/testify v1.6.1
9+
github.com/stretchr/testify v1.7.0
1010
)

0 commit comments

Comments
 (0)