Casbin是一个强大而高效的开源访问控制库,用于Golang项目。它提供了对基于各种访问控制模型的强制授权的支持。
介绍
常见的授权模型
ACL(Access Control List,访问控制列表)
定义谁可以对某个数据进行何种操作,数据模型有:用户
、权限
RBAC(Role-based Access Aontrol,基于角色的访问控制)
用户具有角色,角色具有权限,从而表达用户具有权限,数据模型有:用户
、角色
、权限
ABAC(Attribute-based Access Control,基于属性的访问控制)
权限和资源当时的状态(属性)有关,属性的值可以用于正向判断(符合某种条件则通过)
Casbin 使用
- 在Casbin中,访问控制模型被抽象成一个基于PERM元模型(政策Policy、效果Effect、请求Request、匹配器Matchers)的CONF文件,示例
basic_policy.csv
# Request definition
[request_definition]
r = sub, obj, act
# Policy definition
[policy_definition]
p = sub, obj, act
# Policy effect
[policy_effect]
e = some(where (p.eft == allow))
# Matchers
[matchers]
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act
casbin 模型
定义里会出现 4 个部分:
[request_definition]
访问请求的定义
[policy_definition]
描述授权Policy的定义
[policy_effect]
如果找到匹配的多条的授权 Policy,最终给出的验证授权结果
[matchers]
根据访问请求如何找到匹配的授权policy
更多