Flask如何通过url来做用户权限管理

一个webapp会有好多路由,我们希望限制有些用户能访问哪些路由、有些用户不能访问哪些路由,这就是权限管理。网上关于flask权限管理的文章有好多,我是通过一个简单的方式实现的,就是用户在登陆后查看其是否有访问这个路由的权限。

怎么来实现这个功能呢,这肯定离不开装饰器的帮助,包括只有登陆的用户才能访问url,都需要在flask的view视图函数下面加个装饰器。

下面是一个必须登陆才能访问的装饰器def is_login(view_func):

    @functools.wraps(view_func)    
    def wrapper(*args,**kwargs):
        user_id = session.get('user_id')
        g.user_id = user_id    
        if user_id:
            return view_func(*args,**kwargs)
        else:
            return jsonify(code=0,msg='请登录')
  return wrapper

如果session中有这个user_id就是让其访问,如果没有就提示请登陆,或直接跳转登陆页面

接下来,就是关于权限的装饰器了

def is_urltrue(view_func):
    @functools.wraps(view_func)
    def wrapper(*args,**kwargs):
        user_id = session.get('user_id')
        g.user_id =user_id    
        map = request.base_url
        g.map = map
        id = R_get_role(user_id)
        map_list = is_who(id)
        if map in map_list:
            return view_func(*args,**kwargs)
        else:
            return jsonify(code=0,msg='权限不够')
    return wrapper

这段代码是我仿照着第一个登陆代码逻辑写的,首先也是去获得用户的id,然后通过id去数据库中找到其角色id,看这个角色的权限是否有资格访问这个路由,flask有个获取当前访问url路由的方法,request.base_url,通过这个方法就可以知道其当然访问的路由是什么,再去判断这个路由在不在他的角色能访问的路由列表中,如果在就让其访问,不在就提示权限不够。

我们把所有的角色对应的路由列表写在一个Py文件中,有点类似配置文件,可以随时去改动。这个就是我一个大概的思路

代码为手敲,导包并未提供,有的地方如果有疏漏还请见谅,如果有什么建议,请留言,感激不尽。

 

转载于:https://www.cnblogs.com/sealong/p/9328862.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值