权限管理-菜单管理

Posted louzi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了权限管理-菜单管理相关的知识,希望对你有一定的参考价值。

#获取用户对应的职位
role_list = models.Role.objects.filter(role2userinfo__user=user.pk)
#获取登陆用户的职位对应的权限表中的排除掉菜单的parent_id=None的数据
menu_leaf_list = models.Permission2Action.objects.filter(permission2action2role__role__in=role_list).
exclude(url__menu__isnull=True).values("url__url","url__id", "url__title","url__menu").distinct()
#创建空字典
menu_leaf_dict = {}
#循环菜单中有parent_id的列表
for item in menu_leaf_list:
#修改item字典数据名称并创建child空列表
item = {
"id": item["url__id"],
"url": item["url__url"],
"title": item["url__title"],
"parent_id": item["url__menu"],
"child": [],
}
#如果menu_leaf_dict中包含parent_id就把数据添加到parent_id对应的列表中
if item["parent_id"] in menu_leaf_dict:
menu_leaf_dict[item["parent_id"]].append(item)
else:
#如果不包含parent_id就在parent_id对应的values中创建一个空列表并把值添加到列表中
menu_leaf_dict[item["parent_id"]] = [item, ]

for k,v in menu_leaf_dict.items():
print(k,v)
# 获取菜单的值
menu_list = models.Menu.objects.values( "id", "title", "parent_id")
# 创建空字典
menu_dict = {}
#遍历menu_list的所有元素并且在每个元素下创建一个key为child value为[]的元素
for item1 in menu_list:
item1["child"] = []
#以菜单列表的每个元素的id为key 每个元素为value添加到menu_dict字典中
menu_dict[item1["id"]] = item1
# 遍历menu_leaf_dict把value添加到menu_dict的key相同的元素下
for k, v in menu_leaf_dict.items():
menu_dict[k]["child"] = v

result = []
# 遍历menu_dict的value也可以使用for row in menu_list获取每个菜单的所有元素
for row in menu_dict.values():
if row["parent_id"]:
#如果value中parent_id不为None就把这个value添加到每个元素的parent_id和menu_dict[row[]"parent_id]相
# 对应的child列表中
menu_dict[row["parent_id"]]["child"].append(row)
else:
#如果parent_id为None就把值添加到result中,因为根菜单的paient_id都为None所以会先添加根菜单到result中
# 不需要把所有的元素都添加到child中因为列表和字典都是引用类型,所有的元素都会根据内存地址引用到相对应的
# 根菜单中
result.append(row)











































以上是关于权限管理-菜单管理的主要内容,如果未能解决你的问题,请参考以下文章

js+数据库生成三级动态tree导航菜单

Laravel设计RBAC权限管理出API接口

Django 权限管理-后台根据用户权限动态生成菜单

菜单管理,权限管理,用户管理界面设计

php权限管理如何实现

java如何做权限管理