取出权限url

一、思路

  • 建议保存在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')

你可能感兴趣的:(取出权限url)