update. 完善用户相关增删改查接口以及Schema模型
This commit is contained in:
+12
-19
@@ -6,39 +6,35 @@ from ninja import Router
|
||||
from ninja.errors import HttpError
|
||||
|
||||
from users.models import Role
|
||||
from users.permission import has_permission, clear_user_permissions_cache
|
||||
from users.permission import clear_user_permissions_cache, require_permissions
|
||||
from users.schema import RoleOut, RoleCreate, RoleMenuAssign, RoleUpdate
|
||||
|
||||
router = Router(tags=['roles'])
|
||||
|
||||
|
||||
@router.get("/", response=List[RoleOut], summary="获取角色列表")
|
||||
@require_permissions("role:list")
|
||||
def list_roles(request):
|
||||
return Role.objects.all()
|
||||
|
||||
|
||||
@router.post("/", response=RoleOut, summary="创建角色")
|
||||
@require_permissions("role:create")
|
||||
def create_role(request, payload: RoleCreate):
|
||||
if not has_permission(request.auth.id, "role:create"):
|
||||
raise HttpError(403, "权限不足")
|
||||
role = Role.objects.create(**payload.dict())
|
||||
return role
|
||||
|
||||
|
||||
@router.get("/", response=List[RoleOut], summary="获取角色列表")
|
||||
def list_roles(request):
|
||||
if not has_permission(request.auth.id, "role:list"):
|
||||
raise HttpError(403, "权限不足")
|
||||
return Role.objects.all()
|
||||
|
||||
|
||||
@router.get("/{role_id}/", response=RoleOut, summary="获取角色详情")
|
||||
@require_permissions("role:view")
|
||||
def get_role(request, role_id: int):
|
||||
if not has_permission(request.auth.id, "role:view"):
|
||||
raise HttpError(403, "权限不足")
|
||||
role = get_object_or_404(Role, id=role_id)
|
||||
return role
|
||||
|
||||
|
||||
@router.put("/{role_id}/", response=RoleOut, summary="更新角色")
|
||||
@require_permissions("role:update")
|
||||
def update_role(request, role_id: int, payload: RoleUpdate):
|
||||
if not has_permission(request.auth.id, "role:update"):
|
||||
raise HttpError(403, "权限不足")
|
||||
role = get_object_or_404(Role, id=role_id)
|
||||
for attr, value in payload.dict().items():
|
||||
setattr(role, attr, value)
|
||||
@@ -47,19 +43,16 @@ def update_role(request, role_id: int, payload: RoleUpdate):
|
||||
|
||||
|
||||
@router.delete("/{role_id}/", summary="删除角色")
|
||||
@require_permissions("role:delete")
|
||||
def delete_role(request, role_id: int):
|
||||
if not has_permission(request.auth.id, "role:delete"):
|
||||
raise HttpError(403, "权限不足")
|
||||
role = get_object_or_404(Role, id=role_id)
|
||||
role.delete()
|
||||
return {"success": True}
|
||||
|
||||
|
||||
@router.post("/{role_id}/menus/", summary="分配角色菜单权限")
|
||||
@require_permissions("role:assign_permissions")
|
||||
def assign_role_menus(request, role_id: int, payload: RoleMenuAssign):
|
||||
if not has_permission(request.auth.id, "role:assign_permissions"):
|
||||
raise HttpError(403, "权限不足")
|
||||
|
||||
role = get_object_or_404(Role, id=role_id)
|
||||
# 直接使用 ManyToManyField 的 set() 方法
|
||||
role.menus.set(payload.menu_ids)
|
||||
|
||||
Reference in New Issue
Block a user