如题,利用三层装饰器可以实现Django的权限控制,代码如下:
def require_role(role='user'):
"""
可定义三个级别的管理员权限: ["super", "admin", "user"]
"""
def _deco(func):
def __deco(request, *args, **kwargs):
if not request.user.is_authenticated(): #调用Django封装的User验证方法,如果没验证则返回登录接口。
return HttpResponseRedirect(reverse('login'))
if role == 'admin': #进行权限判断,如果不是管理员,则表明无此权限,返回主页
if request.user.role == 'CU':
return HttpResponseRedirect(reverse('index'))
elif role == 'super': #同上
if request.user.role in ['CU', 'GA']:
return HttpResponseRedirect(reverse('index'))
return func(request, *args, **kwargs)
return __deco
return _deco
总结
Django因为本身就有admin的管理后台,在实现权限管理这块非常方便,不过有时也需要用装饰器来实现,并且该三层装饰器用于实现flask的权限控制也是ok的,简单易实现。