Flask—Login中权限(角色)管理的实现方法?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flask—Login中权限(角色)管理的实现方法?相关的知识,希望对你有一定的参考价值。

1、小弟自学flask,看的是《Flask Web开发》这本书,其中权限管理利用十六进制的权限值来实现。书上十六进制的权限值似乎和位值是一一对应的,但示例代码中没有明确定义这种对应关系,这种对应是怎么实现的呢?在数据库字段permissions中存储的是位值、十六进制值、十进制值还是二进制值呢?2、我准备写个小网站,照葫芦画瓢定义利用十六进制值来定义角色,运行时总是报错,提示非法参数。小弟搞不明白是啥原因,求大神指点。后来我干脆把权限变量对应的值直接用十进制的数定义,数据库是可以顺利地初始化,但是在运行一些需要权限的程序时,本来没有定义此权限的用户也可以运行,估计是因为我定义的权限种类有十几种,又使用十进制数定义权限值,导致权限不能准确区分。我如果要按照书上的方法定义权限,该如何实现?书上的方法不论多少种权限都能准备无误的区分吗?3、在flask web中利用Flask—login定义权限(角色)只有书上介绍的这一种思路么,如果有其他思路,应该如何来实现?4、flask有没有其他专门实现权限管理的扩展库?如何使用?求大神指点!!!!我在mdels中定义的与权限有关的代码如下:
求大神指点!!!!

参考技术A 计算机存储的信息都是按照二进制存的,之所以有各种进制只是输出形式的不同。
这个访问权限的控制,是用一位来表示一种权限,在进行某种操作时,如何判断该用户是否能够进行该操作,是通过在每次操作前执行权限判断,就是将该操作的权限code,与访问者角色的权限code两者相与,如何非零,则表示可以进行该操作,进而继续执行。否则,终止执行,抛出Permission deny。
除了这种基于二进制的权限实现方法,还可以将权限信息写到数据库中,不过原理基本一致。

flask中权限访问装饰器

根据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

 

以上是关于Flask—Login中权限(角色)管理的实现方法?的主要内容,如果未能解决你的问题,请参考以下文章

基于Python的Flask WEB框架实现后台权限管理系统(含数据库),内容包含:用户管理角色管理资源管理和机构管理

PostgreSQL的用户,角色跟权限管理怎么解决

基于Flask实现后台权限管理系统 - 高清图

从零开始——基于角色的权限管理01(补充)

Flask-Admin权限,用于添加具有特定角色的用户

flask学习笔记(-用户)