寻找适用于Python Web的RBAC模块
我在评估Cyclone,一种混合Tornado WebFrame和Twisted Framework的开源Web。该项目文档不太齐全,或者说大部分其实是Tornado的文档,好在参考Tornado API,理解没有特别的问题。
Cyclone/Tornado有了基本的框架,包括auth,DB,template,以及基本的安全设计,以及其他协议如email等。但是,web中缺乏一个基本的构建模块:RBAC。
我检索了一下Python相关的RBAC实现:
https://pypi.python.org/pypi?%3Aaction=search&term=RBAC&submit... (RBAC on Python.org)
http://stackoverflow.com/search?q=RBAC+python (RBAC Python on stackoverflow.com)
http://pydoc.net/Python/security-rbac/1.0/security.rbac.core.impl.rbac... (security.rbac.python)
https://github.com/comger/tor_access (tor.access, RBAC for Tornado, 中文)
https://github.com/kyleterry/simpleacl-py (simpleacl-py)
https://github.com/limscoder/Python-ACL/ (python-acl)
http://www.limscoder.com/2009/11/role-based-security-with-python.html (Python-acl)
http://web2py.com/books/default/chapter/29/09/access-control (web2py access control)
似乎Django, Flask,web2py采用专门的RBAC,那个simple-rbac似乎年久失修。Twisted有一个LDAP模块,还需要专门的LDAP服务器。PHP框架Yii/ThinkPHP/CodeIgniter基本上都有自己的RBAC实现。
想问问大家都是如何实现这部分模块的?除了上面列出的模块,是否还有通用性较强的RBAC模块可以用于web?如果轮子找不到,只有自己重新造轮子了。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
等了很久没有人回答。还在让人失望。
我参考了Grinberg的Flask Web Development的设计。设计思路是:
为User表格增加Role,并作为外键;
添加Role表格,其中permission一栏中以二进制表达细颗粒的权限,比如某个编辑文章,删除文章等。
在Controller入口处判断,读取用户的Role表,再读取permission表,再与当前所需要的权限比较后,转向403或者继续执行渲染。
但是就RBAC的逻辑来说,不嫌麻烦的话,可以在每个Controller入口处判断一下。
理想状态下,所有RBAC判断应该以decorator形式存在。但是Tornado/Cyclone是异步框架,而且decorator本身就是需要异步访问数据库。而异步访问本身就是decorator,也就是说需要用decorator来修改decorator。
https://github.com/klada/django-auth-rbac/blob/master/README.md 这个是基于django auth实现的RBAC, 在课程实验里用过 可以研究下
可以看一下Casbin,支持ACL、RBAC、ABAC等模型:https://casbin.org/