refactor: 重构权限管理模块为菜单管理模块

1. 前端将权限管理页面替换为菜单管理页面,更新路由配置
2. 后端角色删除逻辑优化,新增角色存在性检查
3. 后端权限删除逻辑增强,自动清理关联数据并调整子权限层级
4. 更新初始化权限数据中的菜单管理配置
This commit is contained in:
jayhgq 2026-06-10 09:47:29 +08:00
parent 12a577f9a3
commit fa88dd8ec2
5 changed files with 40 additions and 26 deletions

View File

@ -218,15 +218,33 @@ async def delete_permission(
db: AsyncSession = Depends(get_db), db: AsyncSession = Depends(get_db),
current_user: User = Depends(get_current_user), current_user: User = Depends(get_current_user),
): ):
"""删除权限""" """删除权限(自动清理角色关联和子权限关联)"""
# 检查权限是否存在 # 检查权限是否存在
result = await db.execute(select(Permission).filter(Permission.id == permission_id)) result = await db.execute(select(Permission).filter(Permission.id == permission_id))
existing_permission = result.scalar_one_or_none() existing_permission = result.scalar_one_or_none()
if not existing_permission: if not existing_permission:
raise HTTPException(status_code=404, detail="权限不存在") raise HTTPException(status_code=404, detail="权限不存在")
# 使用FastCRUD删除权限 # 1. 删除角色-权限关联表中的记录
deleted = await permission_crud.delete(db, id=permission_id) from sqlalchemy import delete as sql_delete
from models import role_permission
stmt = sql_delete(role_permission).where(role_permission.c.permission_id == permission_id)
await db.execute(stmt)
# 2. 处理子权限如果有子权限将子权限的父ID置为0提升为顶级节点
from sqlalchemy import update as sql_update
stmt = (
sql_update(Permission)
.where(Permission.parentid == permission_id)
.values(parentid=0)
)
await db.execute(stmt)
# 3. 使用FastCRUD删除权限本身不提交与前述操作在同一事务中
await permission_crud.delete(db, id=permission_id, commit=False)
await db.commit()
return {"message": "权限删除成功"} return {"message": "权限删除成功"}

View File

@ -125,9 +125,13 @@ async def delete_role(
current_user: User = Depends(get_current_user), current_user: User = Depends(get_current_user),
): ):
"""删除角色""" """删除角色"""
# 检查是否有用户使用此角色 # 检查角色是否存在
from sqlalchemy import select result = await db.execute(select(Role).filter(Role.id == role_id))
existing_role = result.scalar_one_or_none()
if not existing_role:
raise HTTPException(status_code=404, detail="角色不存在")
# 检查是否有用户使用此角色
result = await db.execute(select(User).filter(User.role_id == role_id)) result = await db.execute(select(User).filter(User.role_id == role_id))
users = result.scalars().all() users = result.scalars().all()
if users: if users:
@ -135,14 +139,6 @@ async def delete_role(
status_code=400, detail=f"该角色正在被 {len(users)} 个用户使用,无法删除" status_code=400, detail=f"该角色正在被 {len(users)} 个用户使用,无法删除"
) )
# 使用原生 SQLAlchemy 删除角色FastCRUD 有问题) # 使用FastCRUD删除角色
from sqlalchemy import delete as sql_delete await role_crud.delete(db, id=role_id)
stmt = sql_delete(Role).where(Role.id == role_id)
result = await db.execute(stmt)
if result.rowcount == 0:
raise HTTPException(status_code=404, detail="角色不存在")
await db.commit()
return {"message": "角色删除成功"} return {"message": "角色删除成功"}

View File

@ -69,7 +69,7 @@ async def init_permissions(db: AsyncSession):
# ======================================== # ========================================
{"name": "用户管理", "code": "perm:user", "parentid": 1, "route": "/admin/users", "description": "用户管理子模块"}, {"name": "用户管理", "code": "perm:user", "parentid": 1, "route": "/admin/users", "description": "用户管理子模块"},
{"name": "角色管理", "code": "perm:role", "parentid": 1, "route": "/admin/roles", "description": "角色管理子模块"}, {"name": "角色管理", "code": "perm:role", "parentid": 1, "route": "/admin/roles", "description": "角色管理子模块"},
{"name": "权限配置", "code": "perm:config", "parentid": 1, "route": "/admin/permissions", "description": "权限配置子模块"}, {"name": "菜单管理", "code": "perm:menu", "parentid": 1, "route": "/admin/menu", "description": "菜单管理子模块"},
# ======================================== # ========================================
# 系统设置 -> 二级子模块 # 系统设置 -> 二级子模块
@ -104,13 +104,13 @@ async def init_permissions(db: AsyncSession):
# ======================================== # ========================================
# 权限配置操作parentid=5 # 权限配置操作parentid=5
# ======================================== # ========================================
{"name": "查看列表", "code": "perm:config:list", "parentid": 5, "description": "查看权限列表"}, {"name": "查看列表", "code": "perm:menu:list", "parentid": 5, "description": "查看权限列表"},
{"name": "查看详情", "code": "perm:config:detail", "parentid": 5, "description": "查看权限详情"}, {"name": "查看详情", "code": "perm:menu:detail", "parentid": 5, "description": "查看权限详情"},
{"name": "搜索", "code": "perm:config:search", "parentid": 5, "description": "搜索权限"}, {"name": "搜索", "code": "perm:menu:search", "parentid": 5, "description": "搜索权限"},
{"name": "创建", "code": "perm:config:create", "parentid": 5, "description": "创建新权限"}, {"name": "创建", "code": "perm:menu:create", "parentid": 5, "description": "创建新权限"},
{"name": "编辑", "code": "perm:config:edit", "parentid": 5, "description": "编辑权限信息"}, {"name": "编辑", "code": "perm:menu:edit", "parentid": 5, "description": "编辑权限信息"},
{"name": "删除", "code": "perm:config:delete", "parentid": 5, "description": "删除权限"}, {"name": "删除", "code": "perm:menu:delete", "parentid": 5, "description": "删除权限"},
{"name": "导出", "code": "perm:config:export", "parentid": 5, "description": "导岀权限数据"}, {"name": "导出", "code": "perm:menu:export", "parentid": 5, "description": "导岀权限数据"},
# ======================================== # ========================================
# 系统设置 -> 基础配置操作parentid=6 # 系统设置 -> 基础配置操作parentid=6

View File

@ -39,11 +39,11 @@ const router = createRouter({
}, },
{ {
path: "permissions", path: "menu",
name: "admin-permissions", name: "admin-menu",
meta: { title: "菜单管理", permission: "perm:menu" }, meta: { title: "菜单管理", permission: "perm:menu" },
component: () => component: () =>
import("@/modules/admin/views/permissions/PermissionManage.vue"), import("@/modules/admin/views/permissions/MenuManage.vue"),
}, },
{ {
path: "settings", path: "settings",