## Casbin Auth 中間件
[Casbin](https://github.com/casbin/casbin) 是 Go 下的強大而高效的開源訪問控制庫,它為基于各種模型的授權提供支持。到目前為止,Casbin 支持的訪問控制模型如下:
- ACL (訪問控制列表)
- 超級用戶下的ACL
- 沒有用戶的 ACL: 對于沒有身份驗證或用戶登錄的系統尤其有用。
- 沒有資源的ACL:過使用 write-article , read-log 等權限,某些方案可以應對一類資源而不是單個資源,它不控制對特定文章或日志的訪問。
- RBAC (基于角色的訪問控制)
- 具有資源角色的 RBAC: 用戶和資源可以同時具有角色 (或組)。
- 具有域 / 租戶 (tenants) 的 RBAC :用戶可以針對不同的域 / 租戶 (tenants) 具有不同的角色集。
- ABAC (基于屬性的訪問控制)
- RESTful
- Deny-override:支持允許和拒絕授權,否認覆蓋允許。
> Echo 社區貢獻
### 依賴
```go
import (
"github.com/casbin/casbin"
casbin_mw "github.com/labstack/echo-contrib/casbin"
)
```
*用法*
```go
e := echo.New()
e.Use(casbin_mw.Middleware(casbin.NewEnforcer("casbin_auth_model.conf", "casbin_auth_policy.csv")))
```
有關語法,請參閱:[Model.md](https://github.com/casbin/casbin/blob/master/Model.md)。
### 自定義配置
*用法*
```go
e := echo.New()
ce := casbin.NewEnforcer("casbin_auth_model.conf", "")
ce.AddRoleForUser("alice", "admin")
ce.AddPolicy(...)
e.Use(casbin_mw.MiddlewareWithConfig(casbin_mw.Config{
Enforcer: ce,
}))
```
### 配置
```go
// Config defines the config for CasbinAuth middleware.
Config struct {
// Skipper defines a function to skip middleware.
Skipper middleware.Skipper
// Enforcer CasbinAuth main rule.
// Required.
Enforcer *casbin.Enforcer
}
```
*默認配置*
```go
// DefaultConfig is the default CasbinAuth middleware config.
DefaultConfig = Config{
Skipper: middleware.DefaultSkipper,
}
```