权限系统03

流程:
登录先执行 initial方法 ---当用户访问http://127.0.0.1:8000/orders/先走中间件rbac ---> 通过之后就到视图 ----> 接着到渲染页面

 

问题

1:验证权限时,不能使用正则,具有局限性

    建立新字段,有字段名进行判断

2:数据的转换

    

# 将权限写入session的统一到这里

def initial_session(request,user):
    """
    方式1:
    # 当前登录用户的所有权限 objects对象 是字典
    permission_info = user.roles.all().values("permissions__url", "permissions__title").distinct()

    # 将权限写入session
    temp = []
    for i in permission_info:
        temp.append(i["permissions__url"])
    request.session["permission_list"] = temp
"""

    # 方式2:(利用codes去替换正则,不用正则去匹配)
    # 创建一个数据格式:包含所有权限url,权限所在组,权限编号
    '''
    yuan

    permission_dict={
        2:{
            "urls":["orders"]
            "codes":["list"]
        }
    }

    request.session["permission_dict"]=permission_dict
    '''

    # 用户的权限信息
    permission_info = user.roles.all().values("permissions__url", "permissions__title","permissions__permission_group_id","permissions__code").distinct()
    print('permission_info',permission_info)

    '''
    permission_info <QuerySet [{'permissions__url': '/orders/', 'permissions__title': '订单列表', 'permissions__permission_group_id': 2, 'permissions__code': 'list'}, 
    {'permissions__url': '/users/', 'permissions__title': '用户列表', 'permissions__permission_group_id': 1, 'permissions__code': 'list'},
    {'permissions__url': '/orders/add/', 'permissions__title': '添加订单', 'permissions__permission_group_id': 2, 'permissions__code': 'add'}]>
    
    # 想要转换成的格式
    permission_dict={

     2:{
           "urls": ["/orders/","/orders/add/"] ,
           "codes":["list","add"]
     },
      1:{
           "urls": ["/users/",] ,
           "codes":["list",]
        }
     }    
            
    '''
    permission_dict = {}
    for item in permission_info:
        gid=item["permissions__permission_group_id"]
        # 有就添加没有就创建  gid是判断哪个组
        if gid in permission_dict:
            permission_dict[gid]["urls"].append(item["permissions__url"]),
            permission_dict[gid]["codes"].append(item["permissions__code"])
        else:
            permission_dict[gid]={
                "urls":[item["permissions__url"]],
                "codes":[item["permissions__code"]]
            }


    request.session["permission_dict"]=permission_dict
    # 注册完 当访问某个视图,被中间件拦截,rbac

 

转载于:https://www.cnblogs.com/jassin-du/p/8524672.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值