zoukankan      html  css  js  c++  java
  • 权限系统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
  • 相关阅读:
    bzoj2301: [HAOI2011]Problem b懵逼乌斯反演
    bzoj3504: [Cqoi2014]危桥 网络流
    bzoj1588: [HNOI2002]营业额统计 splay瞎写
    bzoj1008快速面
    洛谷1212手动枚举各种情况(缩代码成瘾)
    bzoj1968真·想sha法bi题
    bzoj3674同上(好短)
    bzoj3673可持久化线段树实现可持久化数组实现可持久化并查集(好长)
    uoj98未来程序改 纯暴力不要想了
    bzoj3680模拟退火
  • 原文地址:https://www.cnblogs.com/jassin-du/p/8524672.html
Copyright © 2011-2022 走看看