# -*- coding:utf-8 -*- """ @Created on : 2023/5/26 16:17 @Author: hxl @Des: """ from fastapi import APIRouter, Depends, Request from pydantic import BaseModel from helper import respond_to, login_required from models import ModuleMenu, Role, User router = APIRouter(prefix='/role', dependencies=[Depends(login_required)]) class CreateRole(BaseModel): name: str masks: dict admin: bool class UpdateRole(BaseModel): name: str masks: dict admin: bool @router.get('/menu', summary='模块清单', dependencies=[Depends(login_required)]) async def index(): """ 获取模块清单 :return: """ menus = await ModuleMenu.all().values() return respond_to(data=menus) @router.post('', summary='创建角色') async def create(post: CreateRole): """ 创建角色 :param post: CreateBoard :return: """ result = await Role.create(**post.dict()) if not result: return respond_to(desc="创建失败!") return respond_to(desc="创建成功!") @router.delete('/{role_id}', summary='删除角色') async def destroy(role_id: str): """ 删除角色 :param role_id: str :return: """ role = await Role.get(id=role_id) users_with_role = await User.filter(role_id=role.pk).count() if users_with_role: return respond_to(code=400, desc='删除失败,该角色已被其他用户绑定') await role.delete() return respond_to(desc='删除成功') @router.put('/{role_id}', summary='编辑角色') async def update(role_id: str, post: UpdateRole): """ 编辑角色 :param role_id: str :post role_id: UpdateRole :return: """ role = await Role.get(id=role_id) role.name = post.name role.masks = post.masks role.admin = post.admin await role.save() return respond_to(desc='更新成功') @router.get('', summary='角色列表') async def index(request: Request): """ 获取角色列表 :return: """ role_id = request.state.current_user.role_id current_role = await Role.get(id=role_id) roles_list = [] roles = await Role.all() for role in roles: if role.grade <= current_role.grade: roles_list.append(role) return respond_to(data=roles_list)