mini-rbac/backend/dbhelper/role.py
2022-09-16 11:52:08 +08:00

74 lines
1.9 KiB
Python

from tortoise import connections
from models import MenuModel, RoleMenuModel, RoleModel
from schemas.role import RoleIn
async def get_role_menus(rid: int):
"""
根据角色id 获取菜单
"""
db = connections.get("default")
return await db.execute_query_dict(
"""
select m.id, m.name, m.meta, m.path, m.type, m.component, m.pid, m.identifier, m.api, m.method
FROM sys_menu as m, sys_role_menu WHERE m.id = sys_role_menu.mid
AND sys_role_menu.rid = (?) AND sys_role_menu.`status` = 1""",
[rid],
)
async def new_role(role: RoleIn):
"""新增角色"""
# 校验菜单是否存在
if not all([await MenuModel.filter(id=mid).first() for mid in role.menus]):
return False
obj = await RoleModel.create(name=role.name, remark=role.remark)
# 写入菜单
await RoleMenuModel.bulk_create(
[RoleMenuModel(rid=obj.id, mid=mid) for mid in role.menus]
)
return obj
async def get_roles(skip: int, limit: int, kwargs: dict = None):
"""
分页获取用户并且支持字段模糊查询
Args:
skip: 偏移量
limit: 数量
kwargs: 查询字典
Returns:
"""
if kwargs is not None:
kwargs = {f"{k}__contains": v for k, v in kwargs.items()}
else:
kwargs = {}
result = RoleModel.filter(**kwargs).all().order_by("-created")
return await result.offset(skip).limit(limit), await result.count()
async def get_role(kwargs):
"""
根据条件查询到第一条符合结果的数据
Args:
kwargs:
Returns:
"""
return await RoleModel.filter(**kwargs).first()
async def del_role(rid: int):
"""删除用户"""
return await RoleModel.filter(id=rid).update(status=9)
async def put_role(pk: int, data):
"""更新角色"""
return await RoleModel.filter(id=pk).update(**data.dict())