Casbin Auth

Casbin Auth

原文:https://echo.labstack.com/docs/middleware/casbin-auth

注意

​ 这是 Echo 社区的贡献。

Casbin 是一个功能强大且高效的 Go 开源访问控制库。它支持基于各种模型的授权策略。目前,Casbin 支持的访问控制模型有:

  • ACL(访问控制列表 Access Control List)
  • 带超级用户的 ACL (ACL with superuser)
  • 无用户的 ACL:适用于没有身份验证或用户登录的系统。
  • 无资源的 ACL:某些场景可能针对的是一类资源,而不是个别资源,可以使用像写文章、读取日志之类的权限。它不控制对特定文章或日志的访问。
  • RBAC(基于角色的访问控制 Role-Based Access Control)
  • 带资源角色的 RBAC:用户和资源可以同时拥有角色(或组)。
  • 带域/租户(domains/tenants)的 RBAC:用户可以为不同的域/租户设置不同的角色集合。
  • ABAC(基于属性的访问控制 Attribute-Based Access Control)
  • RESTful
  • Deny-override:支持允许(allow)和拒绝(deny)两种授权方式,拒绝会覆盖允许。

信息

​ 目前仅支持 HTTP 基本身份验证。

依赖

1
2
3
4
import (
  "github.com/casbin/casbin"
  casbin_mw "github.com/labstack/echo-contrib/casbin"
)

Usage

1
2
3
e := echo.New()
enforcer, err := casbin.NewEnforcer("casbin_auth_model.conf", "casbin_auth_policy.csv")
e.Use(casbin_mw.Middleware(enforcer))

​ 有关语法,请参阅:模型语法

Custom Configuration

Usage

1
2
3
4
5
6
7
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,
}))

Configuration

1
2
3
4
5
6
7
8
9
// Config 定义了 CasbinAuth 中间件的配置。
Config struct {
  // Skipper 定义一个用于跳过中间件的函数。
  Skipper middleware.Skipper

  // Enforcer 是 CasbinAuth 的主要规则。
  // 必填项。
  Enforcer *casbin.Enforcer
}

Default Configuration

1
2
3
4
// DefaultConfig 是 CasbinAuth 中间件的默认配置。
DefaultConfig = Config{
  Skipper: middleware.DefaultSkipper,
}
最后修改 February 5, 2024: 更新 (f57b279)