在python中支持acl、rbac、abac等访问控制模型的授权库
casbin的Python项目详细描述
皮卡斯宾
新闻:仍然担心如何编写正确的casbin策略?casbin在线编辑
来帮忙了!点击http://casbin.org/editor/" rel="nofollow">http://casbin.org/editor/
casbin是一个强大而高效的python项目开源访问控制库。它提供了基于各种访问控制模型的强制授权支持。
casbin支持的所有语言:
<表><广告>目录
支持的型号
- acl(访问控制列表)
- 具有超级用户的acl
- 没有用户的acl:对于没有身份验证或用户登录的系统特别有用。
- 没有资源的acl:有些场景可能使用权限(如
写文章
,读日志
)来针对某一类型的资源,而不是单个资源。它不控制对特定文章或日志的访问。- rbac(基于角色的访问控制)
- 具有资源角色的RBAC:用户和资源可以同时具有角色(或组)。
- 带域/租户的RBAC:用户可以为不同的域/租户设置不同的角色集。
- abac(基于属性的访问控制):语法sugar like
resource.owner
可用于获取资源的属性。- restful:支持
/res/*
,/res/:id
等路径和get
,post
,put
,delete
- 拒绝覆盖:同时支持"允许"和"拒绝"授权,拒绝覆盖"允许"。
- 优先级:可以像防火墙规则一样对策略规则进行优先级排序。
< > >它是怎么工作的?
在casbin中,基于perm元模型(policy、effect、request、matchers)将访问控制模型抽象成conf文件。因此,切换或升级项目的授权机制与修改配置一样简单。通过组合可用的模型,可以自定义自己的访问控制模型。例如,您可以在一个模型中获取rbac角色和abac属性,并共享一组策略规则。
casbin中最基本、最简单的模型是acl。acl的模型配置是:
# 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
acl模型的示例策略如下:
p, alice, data1, read p, bob, data2, write
意思是:
- 爱丽丝可以读取数据1
- Bob可以写入数据2
我们还支持多行模式,在最后加上"\":
# Matchers[matchers]m=r.sub == p.sub && r.obj == p.obj \ && r.act == p.act
此外,如果您使用abac,您可以在casbingolang版本中尝试operator
in
,如下所示(jcasbin和node casbin尚不受支持):# Matchers[matchers]m=r.obj == p.obj && r.act == p.act || r.obj in ('data2', 'data3')
但是您应该确保数组的长度比1多,否则会导致数组死机。
对于更多的运营商,您可以查看govaluate
功能
casbin做什么:
- 在经典的
{subject,object,action}
表单或您定义的自定义表单中实施策略,同时支持"允许"和"拒绝"授权。 - 处理访问控制模型及其策略的存储。
- 管理角色用户映射和角色角色映射(在rbac中也称为角色层次结构)。
- 支持内置超级用户,如
root
或administrator
。超级用户可以在没有明确权限的情况下执行任何操作。 - 支持规则匹配的多个内置运算符。例如,
keymatch
可以将资源键/foo/bar
映射到模式/foo*
< > > - 身份验证(即当用户登录时验证
用户名
和密码
) - 管理用户或角色列表。我相信项目本身更方便管理这些实体。用户通常有自己的密码,而casbin不是设计为密码容器的。但是,casbin存储rbac场景的用户角色映射。 < > >
- 使用模型文件和策略文件新建casbin执行器: < > >
- 在访问发生之前在代码中添加一个强制钩子: < > >
- 除了静态策略文件外,casbin还为r提供了权限管理api联合国时间。例如,您可以获得分配给用户的所有角色,如下所示: < > >
- 有关更多用法,请参阅
测试
文件。 < > > - 管理api:为casbin策略管理提供完全支持的原始api。有关示例,请参见此处的。
- rbac api:一个更友好的rbac api。这个api是管理api的一个子集。rbac用户可以使用这个api来简化代码。有关示例,请参见此处。
casbin不做的事:
安装
pip install casbin
文档
https://casbin.org/docs/en/overview
在线编辑
您还可以使用在线编辑器(http://casbin.org/editor/" rel="nofollow">http://casbin.org/editor/)在Web浏览器中编写您的casbin模型和策略。它提供了语法突出显示和代码完成等功能,就像编程语言的ide一样。
教程
https://casbin.org/docs/en/tutorials
开始
importcasbine=casbin.Enforcer("path/to/model.conf","path/to/policy.csv")
注意:您也可以用db而不是file中的policy初始化一个执行器,有关详细信息,请参见persistence部分。
sub="alice"# the user that wants to access a resource.obj="data1"# the resource that is going to be accessed.act="read"# the operation that the user performs on the resource.ife.enforce(sub,obj,act):# permit alice to read data1passelse:# deny the request, show an errorpass
roles=e.get_roles("alice")
有关更多用法,请参见策略管理API。
政策管理
casbin提供两组api来管理权限:
我们还为模型管理和策略管理提供了一个基于web的ui:
策略持久性
https://casbin.org/docs/en/adapters
角色经理
https://casbin.org/docs/en/role managers
基准
https://casbin.org/docs/en/benchmark
示例
<表><广告> < /广告><正文>型号 模型文件 策略文件 ACL basic_model.conf basic_policy.csv 具有超级用户的acl basic_model_with_root.conf basic_policy.csv 没有用户的acl basic_model_without_users.conf 基本_policy_without_users.csv 没有资源的acl basic_model_without_resources.conf 基本策略_without_resources.csv 澳大利亚央行 rbac_model.conf rbac_policy.csv 具有资源角色的RBAC rbac_model_with_resource_roles.conf rbac_polic您可以使用资源角色.csv 具有域/租户的RBAC rbac_model_with_domains.conf rbac_policy_with_domains.csv ABAC abac_model.conf n/a 宁静的 keymatch_model.conf keymatch_policy.csv 拒绝覆盖 rbac_model_with_deny.conf rbac_policy_with_deny.csv 优先级 优先级_model.conf 优先级策略.csv 中间产品
authz middleware for web frameworks:https://casbin.org/docs/en/middlewares" rel="nofollow">https://casbin.org/docs/en/middlewares
我们的采用者
https://casbin.org/docs/en/adopters
贡献者
支持者
感谢我们所有的支持者![成为支持者]
赞助商
通过成为赞助人来支持这个项目。您的徽标将显示在这里,并带有指向您网站的链接。[成为申办人]
<HREF="HTT"ps://opencollective.com/casbin/sponsor/4/website" rel="nofollow">
许可证
此项目是在apache 2.0许可下获得许可的
联系人
如果您有任何问题或功能要求,请与我们联系。欢迎公关。
推荐PyPI第三方库