https://github.com/grepplabs/casbin-jetstream
NATS JetStream adapter for Casbin
https://github.com/grepplabs/casbin-jetstream
access-control acl auth authorization authz casbin casbin-adapter jetstream nats rbac
Last synced: 3 months ago
JSON representation
NATS JetStream adapter for Casbin
- Host: GitHub
- URL: https://github.com/grepplabs/casbin-jetstream
- Owner: grepplabs
- License: apache-2.0
- Created: 2025-09-19T17:54:21.000Z (9 months ago)
- Default Branch: main
- Last Pushed: 2026-01-10T19:32:17.000Z (5 months ago)
- Last Synced: 2026-01-11T05:49:43.861Z (5 months ago)
- Topics: access-control, acl, auth, authorization, authz, casbin, casbin-adapter, jetstream, nats, rbac
- Language: Go
- Homepage:
- Size: 45.9 KB
- Stars: 2
- Watchers: 0
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
Casbin JetStream
====
[](https://github.com/grepplabs/casbin-jetstream/actions/workflows/ci.yml)
[](https://pkg.go.dev/github.com/grepplabs/casbin-jetstream)
[](https://github.com/grepplabs/casbin-jetstream/releases)
Casbin JetStream is the [NATS JetStream](https://docs.nats.io/nats-concepts/jetstream) adapter for [Casbin](https://github.com/casbin/casbin). With this library, Casbin can load policy from JetStream or save policy to it.
## Installation
go get github.com/grepplabs/casbin-jetstream
## Usage Examples
### Basic Usage
```go
package main
import (
"github.com/casbin/v3"
jsadapter "github.com/grepplabs/casbin-jetstream"
)
func main() {
// Initialize a casbin jetstream adapter and use it in a Casbin enforcer:
a, _ := jsadapter.NewAdapter(&jsadapter.Config{
URL: "nats://localhost:4222",
})
e, _ := casbin.NewEnforcer("examples/rbac_model.conf", a)
// Load the policy from KV Store.
e.LoadPolicy()
// Check the permission.
e.Enforce("alice", "data1", "read")
// Modify the policy.
// e.AddPolicy(...)
// e.RemovePolicy(...)
// Save the policy back to KV Store.
e.SavePolicy()
}
```
### With mTLS
```go
a, _ := jsadapter.NewAdapter(&jsadapter.Config{
URL: "nats://localhost:4223",
Bucket: "casbin_rules",
TLSConfig: jsadapter.TLSConfig{
Enable: true,
Refresh: 15 * time.Second,
File: jsadapter.TLSClientFiles{
Cert: "/etc/nats/certs/nats-client.pem",
Key: "/etc/nats/certs/nats-client-key.pem",
RootCAs: "/etc/nats/certs/ca.pem",
},
},
})
defer a.Close()
```