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.

96 lines
2.2 KiB

# -*- 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)