一、思路
-
建议保存在session中
-
models.表,取出的就是相应表的对象
-
把权限都存在session中,也就将url都存入session
-
权限和url是多对多,一个人有多个权限的时候,他们的url也容易出现交集所以要去重
-
获取权限url第一步,获取用户对应权限
-
第一种方法获取用户名再去多对多表获取所有表的内容,在进一步取值
username = request.GET.get('u')
user = models.userinfo.objects.filter(username=username)
# 通过用户id或者用户名,获取用户和权限的多对多 对象
#obg_ru = models.User2Role.objects.filter(u=user)#['User2Role',User2Role]
- 第二种方法要获取权限,我们直接去权限表查
username = request.GET.get('u')
user = models.userinfo.objects.filter(username=username)
#利用modles.那个表就是查那个表的原则
#obj_Role = models.Role.objects.filter(user2role__u = user)
- 第三种方法就是第二种的升级版本,不用去查userinfo表
#一条语句,查多对多表的user键查username
obj_Role = models.Role.objects.filter(user2role__u__username=username)
print(obj_Role)
-
第二步获取权限对应的url
- 第一种不推荐
#查完权限,查权限对应的操作,权限可能有很多所以用in
models.Url2Action2Role.objects.filter(r__in=obj_Role)#['Url2Action2Role','Url2Action2Role]
- 第二种一定用in去查所有权限内
#利用权限去查网址和增删改查的表
obj_url2action = models.Url2Action.objects.\
filter(url2action2role__r__in=obj_Role).\
values('url__url','a__code').distinct()
print(obj_url2action)
二、完美写法
def menu(request):
# 第一种方法
username = request.GET.get('u')
obj_Role = models.Role.objects.filter(user2role__u__username=username)
obj_url2action = models.Url2Action.objects.\
filter(url2action2role__r__in=obj_Role).\
values('url__url','a__code').distinct()
print(obj_url2action)
return render(request,'menu.html')
网友评论