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