基于Casbin的Flask授权中间件,支持ACL、RBAC、ABAC
项目描述
flask-authz
flask-authz 是 Flask 的授权中间件,它基于 PyCasbin。
安装
pip install flask-authz
或者克隆仓库
$ git clone https://github.com/pycasbin/flask-authz.git
$ python setup.py install
模块使用
from flask import Flask
from flask_authz import CasbinEnforcer
from casbin.persist.adapters import FileAdapter
app = Flask(__name__)
# Set up Casbin model config
app.config['CASBIN_MODEL'] = 'casbinmodel.conf'
# Set headers where owner for enforcement policy should be located
app.config['CASBIN_OWNER_HEADERS'] = {'X-User', 'X-Group'}
# Add User Audit Logging with user name associated to log
# i.e. `[2020-11-10 12:55:06,060] ERROR in casbin_enforcer: Unauthorized attempt: method: GET resource: /api/v1/item by user: janedoe@example.com`
app.config['CASBIN_USER_NAME_HEADERS'] = {'X-User'}
# Set up Casbin Adapter
adapter = FileAdapter('rbac_policy.csv')
casbin_enforcer = CasbinEnforcer(app, adapter)
@app.route('/', methods=['GET'])
@casbin_enforcer.enforcer
def get_root():
return jsonify({'message': 'If you see this you have access'})
@app.route('/manager', methods=['POST'])
@casbin_enforcer.enforcer
@casbin_enforcer.manager
def make_casbin_change(manager):
# Manager is an casbin.enforcer.Enforcer object to make changes to Casbin
return jsonify({'message': 'If you see this you have access'})
示例配置 此示例文件可在 tests/casbin_files
中找到
[request_definition]
r = sub, obj, act
[policy_definition]
p = sub, obj, act
[role_definition]
g = _, _
[policy_effect]
e = some(where (p.eft == allow))
[matchers]
m = (p.sub == "*" || g(r.sub, p.sub)) && r.obj == p.obj && (p.act == "*" || r.act == p.act)
示例策略 此示例文件可在 tests/casbin_files
中找到
p, alice, /dataset1/*, GET
p, alice, /dataset1/resource1, POST
p, bob, /dataset2/resource1, *
p, bob, /dataset2/resource2, GET
p, bob, /dataset2/folder1/*, POST
p, dataset1_admin, /dataset1/*, *
p, *, /login, *
p, anonymous, /, GET
g, cathy, dataset1_admin
开发
运行单元测试
- 分支/克隆仓库
- 安装 flask-authz 依赖,并运行
pytest
pip install -r dev_requirements.txt
pip install -r requirements.txt
pytest
设置 pre-commit 检查
pre-commit install
使用 pip-tools 更新 requirements
# update requirements.txt
pip-compile --no-annotate --no-header --rebuild requirements.in
# sync venv
pip-sync
手动升级版本
bumpversion major # major release
or
bumpversion minor # minor release
or
bumpversion patch # hotfix release
文档
授权根据 {subject, object, action}
来确定请求,这意味着 subject
可以对 object
执行什么 action
。在这个插件中,意义如下
subject
: 登录用户名object
: 网络资源的 URL 路径,如 "dataset1/item1"action
: HTTP 方法,如 GET、POST、PUT、DELETE,或者您定义的高级操作,如 "read-file"、"write-blog"
有关如何编写授权策略和其他详细信息的说明,请参阅 Casbin 的文档。
获取帮助
许可证
本项目采用 Apache 2.0 许可协议。请参阅 LICENSE 文件以获取完整的许可协议文本。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解更多关于 安装包 的信息。
源分布
flask-authz-2.6.0.tar.gz (13.7 kB 查看哈希)
构建分布
flask_authz-2.6.0-py2.py3-none-any.whl (12.9 kB 查看哈希)
关闭
flask-authz-2.6.0.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9d55275634a64b421f54932370455946819cf48d794b0327360594731e02a46f |
|
MD5 | f09cb68f2e03aba8b35d697596e2fbd8 |
|
BLAKE2b-256 | e16ebda2f22b014f66dabec1368e452769c207d8de7e265e51b964129ba10cf0 |