547a4eeae6
* docs(requirements.txt):升级fastapi、uvicorn版本 * refactor(user):重构用户router、service * ref: role list api * doc: 1 * refactor(backend): mvc ref
62 lines
1.8 KiB
Python
62 lines
1.8 KiB
Python
from core.dbhelper import MenuDao, RoleDao, RoleMenuDao, has_permissions
|
|
from core.service import Service
|
|
from core.utils import list_to_tree
|
|
|
|
|
|
class RoleService(Service):
|
|
def __init__(self):
|
|
super(RoleService, self).__init__(RoleDao)
|
|
|
|
async def create_item(self, role):
|
|
"""
|
|
创建角色
|
|
:param role: pydantic model
|
|
:return:
|
|
"""
|
|
if not all(
|
|
[await MenuDao.select({"id": mid, "status__not": 9}) for mid in role.menus]
|
|
):
|
|
return dict(code=400, msg="菜单不存在")
|
|
|
|
obj = await RoleDao.insert(dict(name=role.name, remark=role.remark))
|
|
# 写入菜单
|
|
await RoleMenuDao.inserts([dict(rid=obj.id, mid=mid) for mid in role.menus])
|
|
return dict(data=obj)
|
|
|
|
async def update_item(self, pk, data):
|
|
"""
|
|
更新角色
|
|
:param pk:
|
|
:param data:
|
|
:return:
|
|
"""
|
|
if await RoleDao.select({"id": pk}) is None:
|
|
return dict(code=400, msg="角色不存在")
|
|
# 如果不为ture -> 有菜单id不存在
|
|
if not all([await MenuDao.select({"id": mid}) for mid in data.menus]):
|
|
return dict(code=400, msg="菜单不存在")
|
|
|
|
await RoleDao.update(dict(id=pk), dict(name=data.name, remark=data.remark))
|
|
await RoleMenuDao.update(dict(rid=pk), dict(status=9))
|
|
|
|
await RoleMenuDao.inserts([dict(rid=pk, mid=mid) for mid in data.menus])
|
|
|
|
return dict()
|
|
|
|
@staticmethod
|
|
async def has_tree_menus(pk):
|
|
"""
|
|
查询角色拥有菜单
|
|
:param pk:
|
|
:return:
|
|
"""
|
|
menus = await has_permissions(pk, is_menu=True)
|
|
|
|
try:
|
|
return dict(data=list_to_tree(menus))
|
|
except KeyError:
|
|
return dict(code=400, msg="菜单缺少根节点.")
|
|
|
|
|
|
service = RoleService()
|