篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flask—Login中权限(角色)管理的实现方法?相关的知识,希望对你有一定的参考价值。
1、小弟自学flask,看的是《Flask Web开发》这本书,其中权限管理利用十六进制的权限值来实现。书上十六进制的权限值似乎和位值是一一对应的,但示例代码中没有明确定义这种对应关系,这种对应是怎么实现的呢?在数据库字段permissions中存储的是位值、十六进制值、十进制值还是二进制值呢?2、我准备写个小网站,照葫芦画瓢定义利用十六进制值来定义角色,运行时总是报错,提示非法参数。小弟搞不明白是啥原因,求大神指点。后来我干脆把权限变量对应的值直接用十进制的数定义,数据库是可以顺利地初始化,但是在运行一些需要权限的程序时,本来没有定义此权限的用户也可以运行,估计是因为我定义的权限种类有十几种,又使用十进制数定义权限值,导致权限不能准确区分。我如果要按照书上的方法定义权限,该如何实现?书上的方法不论多少种权限都能准备无误的区分吗?3、在flask web中利用Flask—login定义权限(角色)只有书上介绍的这一种思路么,如果有其他思路,应该如何来实现?4、flask有没有其他专门实现权限管理的扩展库?如何使用?求大神指点!!!!我在mdels中定义的与权限有关的代码如下:
求大神指点!!!!
根据session里面保存的管理员id查询出对于的角色,根据角色查询出权限,根据权限查询出能够访问的路径
# 权限控制装饰器
def admin_auth(f):
@wraps(f)
def decorated_function(*args, **kwargs): # 让某个函数来继承我们的参数
admin = Admin.query.join(
Role
).filter(
Role.id == Admin.role_id,
Admin.id == session[‘admin_id‘]
).first()
auths = admin.role.auths
auths = list(map(lambda v: int(v), auths.split(‘,‘)))
auth_list = Auth.query().all()
urls = [v.url for v in auth_list for val in auths if v.id == val.id]
rule=request.url_rule
if rule not in urls:
abort(404)
return f(*args, **kwargs)
return decorated_function