Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

update readme #12

Merged
merged 1 commit into from
Mar 31, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 54 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,63 @@ go get github.com/JunNishimura/casbin-bun-adapter

## 👀 Example
```go
package main

import (
casbinbunadapter "github.com/JunNishimura/casbin-bun-adapter"
"github.com/casbin/casbin/v2"
)

func main() {
// initialize a Bun adapter and use it in a Casbin enforcer
a, _ := casbinbunadapter.NewAdapter("mysql", "mysql_username:mysql_password@tcp(127.0.0.1:3306)/database")
e, _ := casbin.NewEnforcer("model.conf", a)

// load the policy from DB.
_ = e.LoadPolicy()

// check the permission.
_, _ = e.Enforce("alice", "data1", "read")

// modify the policy
// e.AddPolicy(...)
// e.RemovePolicy(...)
// e.UpdatePolicy(...)

// save the policy back to DB.
_ = e.SavePolicy()
}
```

## 😢 Limitations
casbin-bun-adapter has following limitations.
### 1. Table names cannot be freely specified
To specify the table name in Bun, you need to specify it in a structure tag or call the ModelTableExpr method in the query builder.
```go
type User struct {
bun.BaseModel `bun:"table:users,alias:u"`
ID int64 `bun:"id,pk,autoincrement"`
Name string `bun:"name,notnull"`
}
```

```go
res, err := db.NewInsert().
Model(user).
ModelTableExpr("custom_name") // specify table name
Exec(ctx)
```
If you want to create a table with a name specified by the user, you can use ModelTableExpr, but I gave up using ModelTableExpr because I found that query build to tuncate table does not support ModelTableExpr.

If we come up with a better approach, or if Bun's specifications regarding the above change, we will modify this one accordingly.

## 2. Unique indexes cannot be added on columns in the casbin_policies table
For Postgres, you can specify `IF NOT EXISTS` to create a key only when the key does not exist, but other DBs do not support the above syntax by default.

There seems to be no way to check if the index is posted in Bun.

If I find the way to check if the index exists with SQL, it might be possible to achieve this, so I'll leave this as a future issue.

## 🙇‍♂️ Thanks
I would like to express my appreciation to [Gorm Adapter](https://github.com/casbin/gorm-adapter), since casbin-bun-adapter is implemented in a way that fits the Bun ORM based on it.

Expand Down
Loading