from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session from sqlalchemy.exc import IntegrityError from AppUser.Crud import RoleCrud from AppUser.Model import RoleModel from AppUser.Schemas import RoleSchema from Utils.AccessControl import AccessUtil from Utils.DataBase.SqlAlchemyUtils import get_db, engine RoleModel.Base.metadata.create_all(bind=engine) router = APIRouter( tags=["角色管理"], prefix="/api/user/role", dependencies=[Depends(AccessUtil.rbac)] ) @router.post("/create", summary="新建角色") def func01(name: str, db: Session = Depends(get_db)): role_obj = RoleCrud.get_role_by_name(db=db, name=name) if role_obj: raise HTTPException(status_code=202, detail="Role Already Existed") return RoleCrud.create_role(db=db, name=name) @router.post("/delete", summary="删除角色") def func02(role_id: str, db: Session = Depends(get_db)): role_obj = RoleCrud.get_role_by_id(db=db, role_id=role_id) if not role_obj: raise HTTPException(status_code=404, detail="Role Not Found") try: RoleCrud.delete_role_by_id(db=db, role_id=role_id) except IntegrityError: raise HTTPException(status_code=202, detail="Role Is Being Used") return {"info": "Success"} @router.get("/view", summary="查看角色", response_model=RoleSchema.RoleFullResBody) def func03(role_id: str, db: Session = Depends(get_db)): role_obj = RoleCrud.get_role_by_id(db=db, role_id=role_id) if not role_obj: raise HTTPException(status_code=404, detail="Role Not Found") return role_obj.to_dict() @router.post("/policy/create", summary="新建角色权限", response_model=RoleSchema.RolePolicyResBody) def func04(role_id: str, schema: RoleSchema.CreateRolePolicyReqBody, db: Session = Depends(get_db)): rcp_obj = RoleCrud.create_role_policy(db=db, role_id=role_id, schema=schema) return rcp_obj @router.post("/policy/edit", summary="编辑角色权限") def func05(ap_id: str, schema: RoleSchema.EditRolePolicyReqBody, db: Session = Depends(get_db)): RoleCrud.edit_role_policy(db=db, ap_id=ap_id, schema=schema) return {"info": "Success"} @router.post("/policy/delete", summary="删除角色权限") def func06(ap_id: str, db: Session = Depends(get_db)): RoleCrud.delete_role_policy(db=db, ap_id=ap_id) return {"info": "Success"}