查出的数据进行重组
例如
取出来的数据类型是这样的
testlist = [{"id":1,'name':'用户管理',"pid":1,'pname':"菜单管理"},{"id":2,'name':'用户22管理',"pid":1,'pname':"菜单管理"}]
进行数据重组
#定义两个列表
#一个列表存放pid
idlist=[]
#一个列表存放菜单数据 son权限数据
reslist=[]
# reslist = [{"id":1,"name":"菜单管理","son":[{"id":1,'name':'用户管理'},{"id":2,'name':'用户22管理'}]}]
for i in testlist:
if i['pid'] not in idlist:
reslist.append({"id":i['pid'],"name":i['pname'],"son":[{"id":i['id'],'name':i['name']}]})
idlist.append(i['pid'])
else:
index = idlist.index(i['pid'])
reslist[index]['son'].append({"id":i['id'],'name':i['name']})
print(reslist)
重组后的数据是这样的
[{'id': 1, 'name': '菜单管理', 'son': [{'id': 1, 'name': '用户管理'}, {'id': 2, 'name': '用户22管理'}]}]
OA平台进行实现
mysql使用左外连接实现
语法:select 字段 from 表1 left join 表2 on 连接条件;
# 根式或数据
def data_get(data):
if not data:
return []
# 把接收到的数据重组
list_id = []
list_res = []
for i in data:
if i['pid'] not in list_id:
list_res.append({"id": i['pid'], "name": i['pname'], "son": [{"id": i['id'],'url': i['url'], 'name': i['rname']}]})
list_id.append(i['pid'])
else:
index = list_id.index(i['pid'])
list_res[index]['son'].append({"id": i['id'],'url': i['url'], 'name': i['rname']})
return list_res
@staticmethod
def user_resource_all(db: Session, role_id: int) -> list:
# 查询结果集
sql = f"select res.rname,res.url,res.pid,par.id,par.rname as pname from role_resource as rr left join resource as res on rr.resource_id=res.id left join resource as par on res.pid=par.id where role_id={role_id}"
data = db.execute(sql)
# 序列化数据
datas = data_get(data)
return datas
# 获取用户对应的权限
@router.get("/get/user/resource", summary="获取用户对应的权限")
async def get_role_resource(
db: Session = Depends(deps.get_db),
role_id=int
):
response_result = curd_resource.user_resource_all(db, role_id=role_id)
return response_code.resp_200(data=response_result)
根据登录进来的用户 获取他的角色信息来判断他的资源
角色表
资源表
角色资源表
字段 :角色id 资源id