权限中间件

2019-11-28  本文已影响0人  仁安天下

控制访问权限一般有两种方式,一种是通过前端控制,一种是通过后端控制,在前后端分离的开发中,路由一般都是由前端完成的。前后端不分离的开发,则用后台控制比较好。
下面是一个用后台控制路由的例子

class PermisionMiddleware(object):
    """权限中间件"""
    def process_view(self, request, view, args, kwargs):
        if getattr(view, 'permision_exempt', False):
            return None
        user = request.user
        path = ["/UserViewSet"]
        for i in user.groups.all():
            menu = i.grouptomenu_set.all()
            for j in menu:
                path.append(j.menu.path)
        patten = re.compile(r'\.[^\.]*')
        current_path = request.resolver_match._func_path
        format_path = patten.findall(current_path)[-1]
        print format_path
        if format_path.replace('.', '/') not in path:
            return HttpResponseRedirect('/permission')
        else:
            return None

很简单,思路就是在中间件中检查一下当前登录用户所在组有哪些权限路径,如果没有就默认重定向至指定路径,这里要注意的是,这个指定的路径必须包含一个跳过权限检查的装饰器,不然就会无限循环了。

上一篇 下一篇

猜你喜欢

热点阅读