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