mini-rbac/backend/service/role.py
zy7y 547a4eeae6
Refactor backend MVC (#2)
* docs(requirements.txt):升级fastapi、uvicorn版本

* refactor(user):重构用户router、service

* ref: role list api

* doc: 1

* refactor(backend): mvc ref
2022-10-04 18:19:26 +08:00

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()