68 lines
2.3 KiB
Python
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"}
|