You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
27 lines
900 B
27 lines
900 B
from typing import List
|
|
|
|
from app.core.crud import CRUDBase
|
|
from app.models.admin import Api, Menu, Role
|
|
from app.schemas.roles import RoleCreate, RoleUpdate
|
|
|
|
|
|
class RoleController(CRUDBase[Role, RoleCreate, RoleUpdate]):
|
|
def __init__(self):
|
|
super().__init__(model=Role)
|
|
|
|
async def is_exist(self, name: str) -> bool:
|
|
return await self.model.filter(name=name).exists()
|
|
|
|
async def update_roles(self, role: Role, menu_ids: List[int], api_infos: List[dict]) -> None:
|
|
await role.menus.clear()
|
|
for menu_id in menu_ids:
|
|
menu_obj = await Menu.filter(id=menu_id).first()
|
|
await role.menus.add(menu_obj)
|
|
|
|
await role.apis.clear()
|
|
for item in api_infos:
|
|
api_obj = await Api.filter(path=item.get("path"), method=item.get("method")).first()
|
|
await role.apis.add(api_obj)
|
|
|
|
|
|
role_controller = RoleController()
|
|
|