user-wsc/AppUser/Router/RoleAdminRouter.py

68 lines
2.3 KiB
Python

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"}