- 添加用户登录、登出及令牌管理功能 - 实现基于JWT和Redis的认证系统 - 完善用户和角色管理API - 添加密码加密与验证功能 - 配置数据库连接和Redis客户端 - 实现中间件进行权限验证 - 初始化管理员和测试用户数据 - 更新模型和接口文档 - 添加测试API和配置文件
65 lines
2.2 KiB
Python
65 lines
2.2 KiB
Python
from fastapi import APIRouter, Depends, HTTPException
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
from fastcrud import FastCRUD
|
|
|
|
from database import get_db
|
|
from models import Role, User
|
|
from schemas import RoleCreate, RoleResponse
|
|
from middleware import get_current_user
|
|
|
|
router = APIRouter(prefix="/roles", tags=["roles"])
|
|
|
|
# 创建FastCRUD实例
|
|
role_crud = FastCRUD(Role, RoleResponse)
|
|
|
|
|
|
@router.post("/", response_model=RoleResponse)
|
|
async def create_role(role_data: RoleCreate, db: AsyncSession = Depends(get_db), current_user: User = Depends(get_current_user)):
|
|
"""创建角色"""
|
|
# 创建角色实例
|
|
db_role = Role(
|
|
name=role_data.name,
|
|
creator=role_data.creator
|
|
)
|
|
|
|
# 使用FastCRUD创建角色
|
|
created_role = await role_crud.create(db, db_role)
|
|
return created_role
|
|
|
|
|
|
@router.get("/", response_model=list[RoleResponse])
|
|
async def get_roles(db: AsyncSession = Depends(get_db), current_user: User = Depends(get_current_user)):
|
|
"""获取所有角色"""
|
|
roles = await role_crud.get_multi(db)
|
|
return roles
|
|
|
|
|
|
@router.get("/{role_id}", response_model=RoleResponse)
|
|
async def get_role(role_id: int, db: AsyncSession = Depends(get_db), current_user: User = Depends(get_current_user)):
|
|
"""获取单个角色"""
|
|
role = await role_crud.get(db, role_id)
|
|
if not role:
|
|
raise HTTPException(status_code=404, detail="角色不存在")
|
|
return role
|
|
|
|
|
|
@router.put("/{role_id}", response_model=RoleResponse)
|
|
async def update_role(role_id: int, role_data: RoleCreate, db: AsyncSession = Depends(get_db), current_user: User = Depends(get_current_user)):
|
|
"""更新角色"""
|
|
# 准备更新数据
|
|
update_data = role_data.dict()
|
|
|
|
# 使用FastCRUD更新角色
|
|
updated_role = await role_crud.update(db, role_id, update_data)
|
|
if not updated_role:
|
|
raise HTTPException(status_code=404, detail="角色不存在")
|
|
return updated_role
|
|
|
|
|
|
@router.delete("/{role_id}")
|
|
async def delete_role(role_id: int, db: AsyncSession = Depends(get_db), current_user: User = Depends(get_current_user)):
|
|
"""删除角色"""
|
|
deleted = await role_crud.delete(db, role_id)
|
|
if not deleted:
|
|
raise HTTPException(status_code=404, detail="角色不存在")
|
|
return {"message": "角色删除成功"} |