Skip to content

Commit d951292

Browse files
authored
Merge pull request #6 from DivyPatel9881/batch_op
fix: Add batch operations to pg adapter.
2 parents 13bf718 + d7fa4f3 commit d951292

4 files changed

Lines changed: 79 additions & 1 deletion

File tree

adapter.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,13 +233,48 @@ func (a *Adapter) AddPolicy(sec string, ptype string, rule []string) error {
233233
return err
234234
}
235235

236+
// AddPolicies adds policy rules to the storage.
237+
func (a *Adapter) AddPolicies(sec string, ptype string, rules [][]string) error {
238+
var lines []*CasbinRule
239+
for _,rule := range rules{
240+
line := savePolicyLine(ptype, rule)
241+
lines = append(lines, line)
242+
}
243+
244+
err := a.db.RunInTransaction(func(tx *pg.Tx) error {
245+
_, err := tx.Model(&lines).
246+
OnConflict("DO NOTHING").
247+
Insert()
248+
return err
249+
})
250+
251+
return err
252+
}
253+
236254
// RemovePolicy removes a policy rule from the storage.
237255
func (a *Adapter) RemovePolicy(sec string, ptype string, rule []string) error {
238256
line := savePolicyLine(ptype, rule)
239257
err := a.db.Delete(line)
240258
return err
241259
}
242260

261+
// RemovePolicies removes policy rules from the storage.
262+
func (a *Adapter) RemovePolicies(sec string, ptype string, rules [][]string) error {
263+
var lines []*CasbinRule
264+
for _,rule := range rules{
265+
line := savePolicyLine(ptype, rule)
266+
lines = append(lines, line)
267+
}
268+
269+
err := a.db.RunInTransaction(func(tx *pg.Tx) error {
270+
_, err := tx.Model(&lines).
271+
Delete()
272+
return err
273+
})
274+
275+
return err
276+
}
277+
243278
// RemoveFilteredPolicy removes policy rules that match the filter from the storage.
244279
func (a *Adapter) RemoveFilteredPolicy(sec string, ptype string, fieldIndex int, fieldValues ...string) error {
245280
query := a.db.Model((*CasbinRule)(nil)).Where("p_type = ?", ptype)

adapter_test.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,35 @@ func (s *AdapterTestSuite) TestAutoSave() {
105105
[][]string{{"alice", "data1", "read"}, {"bob", "data2", "write"}, {"data2_admin", "data2", "read"}, {"data2_admin", "data2", "write"}, {"alice", "data1", "write"}},
106106
s.e.GetPolicy(),
107107
)
108+
109+
_, err = s.e.AddPolicies([][]string{
110+
{"bob", "data2", "read"},
111+
{"alice", "data2", "write"},
112+
{"alice", "data2", "read"},
113+
{"bob", "data1", "write"},
114+
{"bob", "data1", "read"},
115+
})
116+
s.Require().NoError(err)
117+
// Reload the policy from the storage to see the effect.
118+
err = s.e.LoadPolicy()
119+
s.Require().NoError(err)
120+
// The policy has a new rule: {"alice", "data1", "write"}.
121+
s.assertPolicy(
122+
[][]string{
123+
{"alice", "data1", "read"},
124+
{"bob", "data2", "write"},
125+
{"data2_admin", "data2", "read"},
126+
{"data2_admin", "data2", "write"},
127+
{"alice", "data1", "write"},
128+
{"bob", "data2", "read"},
129+
{"alice", "data2", "write"},
130+
{"alice", "data2", "read"},
131+
{"bob", "data1", "write"},
132+
{"bob", "data1", "read"},
133+
},
134+
s.e.GetPolicy(),
135+
)
136+
108137
s.Require().NoError(err)
109138
}
110139

@@ -141,6 +170,17 @@ func (s *AdapterTestSuite) TestRemovePolicy() {
141170
[][]string{{"bob", "data2", "write"}, {"data2_admin", "data2", "read"}, {"data2_admin", "data2", "write"}},
142171
s.e.GetPolicy(),
143172
)
173+
174+
_, err = s.e.RemovePolicies([][]string{
175+
{"data2_admin", "data2", "read"},
176+
{"data2_admin", "data2", "write"},
177+
})
178+
s.Require().NoError(err)
179+
180+
s.assertPolicy(
181+
[][]string{{"bob", "data2", "write"}},
182+
s.e.GetPolicy(),
183+
)
144184
}
145185

146186
func (s *AdapterTestSuite) TestRemoveFilteredPolicy() {

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module github.com/casbin/casbin-pg-adapter
33
go 1.12
44

55
require (
6-
github.com/casbin/casbin/v2 v2.1.2
6+
github.com/casbin/casbin/v2 v2.4.1
77
github.com/go-pg/pg/v9 v9.1.0
88
github.com/mmcloughlin/meow v0.0.0-20181112033425-871e50784daf
99
github.com/stretchr/testify v1.4.0

go.sum

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible h1:1G1pk05UrOh0NlF1oeaaix1x8XzrfjIDK47TY0Zehcw=
22
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
3+
github.com/casbin/casbin v1.9.1 h1:ucjbS5zTrmSLtH4XogqOG920Poe6QatdXtz1FEbApeM=
34
github.com/casbin/casbin/v2 v2.1.2 h1:bTwon/ECRx9dwBy2ewRVr5OiqjeXSGiTUY74sDPQi/g=
45
github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ=
6+
github.com/casbin/casbin/v2 v2.4.1 h1:1dDJbnUoCTUu5ysFhaYND0yY8YReQ+GDQ7yDy5FNHyY=
7+
github.com/casbin/casbin/v2 v2.4.1/go.mod h1:XXtYGrs/0zlOsJMeRteEdVi/FsB0ph7KgNfjoCoJUD8=
58
github.com/codemodus/kace v0.5.1 h1:4OCsBlE2c/rSJo375ggfnucv9eRzge/U5LrrOZd47HA=
69
github.com/codemodus/kace v0.5.1/go.mod h1:coddaHoX1ku1YFSe4Ip0mL9kQjJvKkzb9CfIdG1YR04=
710
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=

0 commit comments

Comments
 (0)