From b9ba5ac9b721e728284caf50c302b924e5cc386e Mon Sep 17 00:00:00 2001 From: fan_wang Date: Thu, 20 Sep 2018 10:34:13 +0800 Subject: [PATCH 1/6] modify adapter increase method --- README.md | 3 +++ adapter.go | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/README.md b/README.md index 4a7797e..5c844e7 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,9 @@ func main() { // If it doesn't exist, the adapter will create it automatically. // a := mongodbadapter.NewAdapter("127.0.0.1:27017/abc") + // Or you can appoint the table name "rule" like this. + // a := mongodbadapter.NewAdapter("127.0.0.1:27017/abc", "rule") + e := casbin.NewEnforcer("examples/rbac_model.conf", a) // Load the policy from DB. diff --git a/adapter.go b/adapter.go index 4f0f0e3..3d408de 100644 --- a/adapter.go +++ b/adapter.go @@ -61,6 +61,19 @@ func NewAdapter(url string) persist.Adapter { return a } +// Can use provided database name. +func NewDBAdapter(url, name string) persist.Adapter { + a := &adapter{url: url} + + // Open the DB, create it if not existed. + a.openByName(name) + + // Call the destructor when the object is released. + runtime.SetFinalizer(a, finalizer) + + return a +} + // NewFilteredAdapter is the constructor for FilteredAdapter. Behavior is // otherwise indentical to the NewAdapter function. func NewFilteredAdapter(url string) persist.FilteredAdapter { @@ -91,11 +104,40 @@ func (a *adapter) open() { } db := session.DB(dI.Database) + collection := db.C("casbin_rule") a.session = session a.collection = collection + indexes := []string{"ptype", "v0", "v1", "v2", "v3", "v4", "v5"} + for _, k := range indexes { + if err := a.collection.EnsureIndexKey(k); err != nil { + panic(err) + } + } +} +func (a *adapter) openByName(name string) { + dI, err := mgo.ParseURL(a.url) + if err != nil { + panic(err) + } + dI.FailFast = true + + if dI.Database == "" { + dI.Database = "casbin" + } + + session, err := mgo.DialWithInfo(dI) + if err != nil { + panic(err) + } + + db := session.DB(dI.Database) + collection := db.C(name) + + a.session = session + a.collection = collection indexes := []string{"ptype", "v0", "v1", "v2", "v3", "v4", "v5"} for _, k := range indexes { if err := a.collection.EnsureIndexKey(k); err != nil { From 0351202f30ea95ca8464ca2f3f344db621b0435c Mon Sep 17 00:00:00 2001 From: Wynnfan Date: Thu, 20 Sep 2018 10:40:08 +0800 Subject: [PATCH 2/6] Update adapter.go --- adapter.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/adapter.go b/adapter.go index 3d408de..d00cfd2 100644 --- a/adapter.go +++ b/adapter.go @@ -61,7 +61,7 @@ func NewAdapter(url string) persist.Adapter { return a } -// Can use provided database name. +// Can use provided the table name. func NewDBAdapter(url, name string) persist.Adapter { a := &adapter{url: url} From 7ef20d568272b7489e055af8775e8e339498bd32 Mon Sep 17 00:00:00 2001 From: Wynnfan Date: Thu, 20 Sep 2018 10:45:50 +0800 Subject: [PATCH 3/6] delete space --- adapter.go | 1 - 1 file changed, 1 deletion(-) diff --git a/adapter.go b/adapter.go index d00cfd2..78a4efc 100644 --- a/adapter.go +++ b/adapter.go @@ -104,7 +104,6 @@ func (a *adapter) open() { } db := session.DB(dI.Database) - collection := db.C("casbin_rule") a.session = session From e93c3e648d9b7814772d5fef47c7cc50e5db2e46 Mon Sep 17 00:00:00 2001 From: fan_wang Date: Thu, 20 Sep 2018 11:56:41 +0800 Subject: [PATCH 4/6] modify notes --- adapter.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/adapter.go b/adapter.go index 3d408de..bb87b0d 100644 --- a/adapter.go +++ b/adapter.go @@ -61,7 +61,7 @@ func NewAdapter(url string) persist.Adapter { return a } -// Can use provided database name. +// Can use provided table name. func NewDBAdapter(url, name string) persist.Adapter { a := &adapter{url: url} From bb1853d26c77786c282b3f1fefc56faeecc293a2 Mon Sep 17 00:00:00 2001 From: fan_wang Date: Thu, 20 Sep 2018 16:56:14 +0800 Subject: [PATCH 5/6] modify NewAdapter function --- adapter.go | 61 ++++++++++++++---------------------------------------- 1 file changed, 15 insertions(+), 46 deletions(-) diff --git a/adapter.go b/adapter.go index bb87b0d..4a723ab 100644 --- a/adapter.go +++ b/adapter.go @@ -49,24 +49,18 @@ func finalizer(a *adapter) { // NewAdapter is the constructor for Adapter. If database name is not provided // in the Mongo URL, 'casbin' will be used as database name. -func NewAdapter(url string) persist.Adapter { - a := &adapter{url: url} - - // Open the DB, create it if not existed. - a.open() - - // Call the destructor when the object is released. - runtime.SetFinalizer(a, finalizer) - - return a -} - // Can use provided table name. -func NewDBAdapter(url, name string) persist.Adapter { - a := &adapter{url: url} +func NewAdapter(url string, tableName ...string) persist.Adapter { // Open the DB, create it if not existed. - a.openByName(name) + a := &adapter{url: url} + if len(tableName) == 0 { + a.openByName() + } else if len(tableName) == 1 { + a.openByName(tableName[0]) + } else { + panic(errors.New("invalid parameter: tableName")) + } // Call the destructor when the object is released. runtime.SetFinalizer(a, finalizer) @@ -81,7 +75,8 @@ func NewFilteredAdapter(url string) persist.FilteredAdapter { return NewAdapter(url).(*adapter) } -func (a *adapter) open() { +func (a *adapter) open(tableName ...string) { + var collection *mgo.Collection dI, err := mgo.ParseURL(a.url) if err != nil { panic(err) @@ -104,38 +99,12 @@ func (a *adapter) open() { } db := session.DB(dI.Database) - - collection := db.C("casbin_rule") - - a.session = session - a.collection = collection - indexes := []string{"ptype", "v0", "v1", "v2", "v3", "v4", "v5"} - for _, k := range indexes { - if err := a.collection.EnsureIndexKey(k); err != nil { - panic(err) - } - } -} - -func (a *adapter) openByName(name string) { - dI, err := mgo.ParseURL(a.url) - if err != nil { - panic(err) - } - dI.FailFast = true - - if dI.Database == "" { - dI.Database = "casbin" - } - - session, err := mgo.DialWithInfo(dI) - if err != nil { - panic(err) + if len(tableName) == 0 { + collection = db.C("casbin_rule") + } else { + collection = db.C(tableName[0]) } - db := session.DB(dI.Database) - collection := db.C(name) - a.session = session a.collection = collection indexes := []string{"ptype", "v0", "v1", "v2", "v3", "v4", "v5"} From 597cf3666cb92e8971829266a9507ed76300896a Mon Sep 17 00:00:00 2001 From: fan_wang Date: Thu, 20 Sep 2018 17:15:12 +0800 Subject: [PATCH 6/6] modify adapter.go --- adapter.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/adapter.go b/adapter.go index 672497c..d5487ba 100644 --- a/adapter.go +++ b/adapter.go @@ -51,9 +51,9 @@ func finalizer(a *adapter) { // in the Mongo URL, 'casbin' will be used as database name. // Can use provided table name. func NewAdapter(url string, tableName ...string) persist.Adapter { + a := &adapter{url: url} // Open the DB, create it if not existed. - a := &adapter{url: url} if len(tableName) == 0 { a.open() } else if len(tableName) == 1 {