flask学习 Flask Principal翻译(未完)
程序员文章站
2022-07-12 17:26:44
...
Flask Principal
“I am that I am” “我就是我”
简介
Flask Priincipal提供了两种简单的服务,通常用这两种web应用中:
1.权限认证
2.用户信息管理
例如,一个权限认证机制采用 OAUTH,使用flask-oauth ,用户信息存储在关系数据库中。框架使用signal消息作为应用接口(松耦合)。
框架主要部分包含身份(Identity),需求(Needs),权限(Permission),和包含身份信息上下文环境(IdentityContext)
- Identity,标志一个用户,这个用户可能存储或者保存在多中地方,例如session中,每个请求都可以获取这个用户的权限信息。 Identity 是用户在系统中的标志,他包含了用户的访问权限。
- Needs 是一个细粒度访存取控制权限,他代表一个特殊的操作权限,如 “管理员角色”,“可以编辑博客帖子”。Needs 通常是一个tuple。Needs通常被设计为“角色”,“用户”等。例如:tuple (“role”、“admin”) 这个tuple表明了一个admin角色的权限。 Needs是权限列表(set),一个用户拥有一个访问控制权限列表,表明用户可以做那些操作权限。
- Permission用一个set表示,包含了对资源的访问控制。
- IdentityContext 是包含了用户权限的上下文环境,可以昨晚context manager 或者 decorator使用。
Protecting access to resources(资源访问)
Flask-Principal的使用者可以容易的将用户的访问权限定义为 python 装饰器或者上下文管理器。例子:
from flask import Flask, Response
from flaskext.principal import Principal, Permission, RoleNeed
app = Flask(__name__)
# load the extension
principals = Principal(app)
# Create a permission with a single Need, in this case a RoleNeed. 创建一个简单 RoleNedd权限。
admin_permission = Permission(RoleNeed('admin'))
# protect a view with a principal for that need ()
@app.route('/admin')
@admin_permission.require()
def do_admin_index():
return Response('Only if you are an admin')
# this time protect with a context manager
@app.route('/articles')
def do_articles():
with admin_permission.require():
return Response('Only if you are admin')
上一篇: (转载)Flask 出坑记
下一篇: Java之多线程之线程池之线程重复使用