Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/casbin/mongodb-adapter
MongoDB adapter for Casbin
https://github.com/casbin/mongodb-adapter
access-control adapter authorization casbin mongodb storage-driver
Last synced: 3 days ago
JSON representation
MongoDB adapter for Casbin
- Host: GitHub
- URL: https://github.com/casbin/mongodb-adapter
- Owner: casbin
- License: apache-2.0
- Created: 2017-08-09T06:24:39.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2024-07-22T00:56:29.000Z (7 months ago)
- Last Synced: 2024-10-29T22:37:47.630Z (3 months ago)
- Topics: access-control, adapter, authorization, casbin, mongodb, storage-driver
- Language: Go
- Homepage: https://github.com/casbin/casbin
- Size: 68.4 KB
- Stars: 258
- Watchers: 5
- Forks: 53
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
MongoDB Adapter [![CI](https://github.com/casbin/mongodb-adapter/actions/workflows/ci.yml/badge.svg)](https://github.com/casbin/mongodb-adapter/actions/workflows/ci.yml) [![Coverage Status](https://coveralls.io/repos/github/casbin/mongodb-adapter/badge.svg?branch=master)](https://coveralls.io/github/casbin/mongodb-adapter?branch=master) [![Godoc](https://godoc.org/github.com/casbin/mongodb-adapter?status.svg)](https://godoc.org/github.com/casbin/mongodb-adapter)
====MongoDB Adapter is the [Mongo DB](https://www.mongodb.com) adapter for [Casbin](https://github.com/casbin/casbin). With this library, Casbin can load policy from MongoDB or save policy to it.
## Installation
go get -u github.com/casbin/mongodb-adapter/v3
## Simple Example
```go
package mainimport (
"github.com/casbin/casbin/v2"
"github.com/casbin/mongodb-adapter/v3"
)func main() {
// Initialize a MongoDB adapter and use it in a Casbin enforcer:
// The adapter will use the database named "casbin".
// If it doesn't exist, the adapter will create it automatically.
a,err := mongodbadapter.NewAdapter("127.0.0.1:27017") // Your MongoDB URL.
if err != nil {
panic(err)
}
// Or you can use an existing DB "abc" like this:
// The adapter will use the table named "casbin_rule".
// If it doesn't exist, the adapter will create it automatically.
// a := mongodbadapter.NewAdapter("127.0.0.1:27017/abc")e, err := casbin.NewEnforcer("examples/rbac_model.conf", a)
if err != nil {
panic(err)
}// Load the policy from DB.
e.LoadPolicy()
// Check the permission.
e.Enforce("alice", "data1", "read")
// Modify the policy.
// e.AddPolicy(...)
// e.RemovePolicy(...)
// Save the policy back to DB.
e.SavePolicy()
}
```
## Advanced Example```go
package mainimport (
"github.com/casbin/casbin/v2"
"github.com/casbin/mongodb-adapter/v3"
mongooptions "go.mongodb.org/mongo-driver/mongo/options"
)func main() {
// Initialize a MongoDB adapter with NewAdapterWithClientOption:
// The adapter will use custom mongo client options.
// custom database name.
// default collection name 'casbin_rule'.
mongoClientOption := mongooptions.Client().ApplyURI("mongodb://127.0.0.1:27017")
databaseName := "casbin"
a,err := mongodbadapter.NewAdapterWithClientOption(mongoClientOption, databaseName)
// Or you can use NewAdapterWithCollectionName for custom collection name.
if err != nil {
panic(err)
}e, err := casbin.NewEnforcer("examples/rbac_model.conf", a)
if err != nil {
panic(err)
}// Load the policy from DB.
e.LoadPolicy()
// Check the permission.
e.Enforce("alice", "data1", "read")
// Modify the policy.
// e.AddPolicy(...)
// e.RemovePolicy(...)
// Save the policy back to DB.
e.SavePolicy()
}
```## Filtered Policies
```go
import "github.com/globalsign/mgo/bson"// This adapter also implements the FilteredAdapter interface. This allows for
// efficent, scalable enforcement of very large policies:
filter := &bson.M{"v0": "alice"}
e.LoadFilteredPolicy(filter)// The loaded policy is now a subset of the policy in storage, containing only
// the policy lines that match the provided filter. This filter should be a
// valid MongoDB selector using BSON. A filtered policy cannot be saved.
```## Getting Help
- [Casbin](https://github.com/casbin/casbin)
## License
This project is under Apache 2.0 License. See the [LICENSE](LICENSE) file for the full license text.