流程:
登录先执行 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