BookSystem/backend/auth/apps/roles/urls.py
jayhgq f1da855793 feat(auth): 实现用户认证与授权功能
- 添加用户登录、登出及令牌管理功能
- 实现基于JWT和Redis的认证系统
- 完善用户和角色管理API
- 添加密码加密与验证功能
- 配置数据库连接和Redis客户端
- 实现中间件进行权限验证
- 初始化管理员和测试用户数据
- 更新模型和接口文档
- 添加测试API和配置文件
2026-02-28 18:08:53 +08:00

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": "角色删除成功"}