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文件中,有点类似配置文件,可以随时去改动。这个就是我一个大概的思路

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

猜你喜欢

转载自www.cnblogs.com/sealong/p/9328862.html