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
  • 相关阅读:
    IOS性别
    IOS生命周期
    读书的作用
    Core Data
    解析Json数据
    sicily Knight Moves
    sicily 简单魔板2
    Sum of Consecutive Primes
    [OI笔记]杂题整理1(基础篇~)
    [IOI1994]The Castle
  • 原文地址:https://www.cnblogs.com/jassin-du/p/8524672.html
Copyright © 2011-2022 走看看