refactor: 重构权限管理模块为菜单管理模块
1. 前端将权限管理页面替换为菜单管理页面,更新路由配置 2. 后端角色删除逻辑优化,新增角色存在性检查 3. 后端权限删除逻辑增强,自动清理关联数据并调整子权限层级 4. 更新初始化权限数据中的菜单管理配置
This commit is contained in:
parent
12a577f9a3
commit
fa88dd8ec2
@ -218,15 +218,33 @@ async def delete_permission(
|
||||
db: AsyncSession = Depends(get_db),
|
||||
current_user: User = Depends(get_current_user),
|
||||
):
|
||||
"""删除权限"""
|
||||
"""删除权限(自动清理角色关联和子权限关联)"""
|
||||
# 检查权限是否存在
|
||||
result = await db.execute(select(Permission).filter(Permission.id == permission_id))
|
||||
existing_permission = result.scalar_one_or_none()
|
||||
if not existing_permission:
|
||||
raise HTTPException(status_code=404, detail="权限不存在")
|
||||
|
||||
# 使用FastCRUD删除权限
|
||||
deleted = await permission_crud.delete(db, id=permission_id)
|
||||
# 1. 删除角色-权限关联表中的记录
|
||||
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": "权限删除成功"}
|
||||
|
||||
|
||||
|
||||
@ -125,9 +125,13 @@ async def delete_role(
|
||||
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))
|
||||
users = result.scalars().all()
|
||||
if users:
|
||||
@ -135,14 +139,6 @@ async def delete_role(
|
||||
status_code=400, detail=f"该角色正在被 {len(users)} 个用户使用,无法删除"
|
||||
)
|
||||
|
||||
# 使用原生 SQLAlchemy 删除角色(FastCRUD 有问题)
|
||||
from sqlalchemy import delete as sql_delete
|
||||
|
||||
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()
|
||||
# 使用FastCRUD删除角色
|
||||
await role_crud.delete(db, id=role_id)
|
||||
return {"message": "角色删除成功"}
|
||||
|
||||
@ -69,7 +69,7 @@ async def init_permissions(db: AsyncSession):
|
||||
# ========================================
|
||||
{"name": "用户管理", "code": "perm:user", "parentid": 1, "route": "/admin/users", "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)
|
||||
# ========================================
|
||||
{"name": "查看列表", "code": "perm:config:list", "parentid": 5, "description": "查看权限列表"},
|
||||
{"name": "查看详情", "code": "perm:config:detail", "parentid": 5, "description": "查看权限详情"},
|
||||
{"name": "搜索", "code": "perm:config:search", "parentid": 5, "description": "搜索权限"},
|
||||
{"name": "创建", "code": "perm:config:create", "parentid": 5, "description": "创建新权限"},
|
||||
{"name": "编辑", "code": "perm:config:edit", "parentid": 5, "description": "编辑权限信息"},
|
||||
{"name": "删除", "code": "perm:config:delete", "parentid": 5, "description": "删除权限"},
|
||||
{"name": "导出", "code": "perm:config:export", "parentid": 5, "description": "导岀权限数据"},
|
||||
{"name": "查看列表", "code": "perm:menu:list", "parentid": 5, "description": "查看权限列表"},
|
||||
{"name": "查看详情", "code": "perm:menu:detail", "parentid": 5, "description": "查看权限详情"},
|
||||
{"name": "搜索", "code": "perm:menu:search", "parentid": 5, "description": "搜索权限"},
|
||||
{"name": "创建", "code": "perm:menu:create", "parentid": 5, "description": "创建新权限"},
|
||||
{"name": "编辑", "code": "perm:menu:edit", "parentid": 5, "description": "编辑权限信息"},
|
||||
{"name": "删除", "code": "perm:menu:delete", "parentid": 5, "description": "删除权限"},
|
||||
{"name": "导出", "code": "perm:menu:export", "parentid": 5, "description": "导岀权限数据"},
|
||||
|
||||
# ========================================
|
||||
# 系统设置 -> 基础配置操作(parentid=6)
|
||||
|
||||
@ -39,11 +39,11 @@ const router = createRouter({
|
||||
|
||||
},
|
||||
{
|
||||
path: "permissions",
|
||||
name: "admin-permissions",
|
||||
path: "menu",
|
||||
name: "admin-menu",
|
||||
meta: { title: "菜单管理", permission: "perm:menu" },
|
||||
component: () =>
|
||||
import("@/modules/admin/views/permissions/PermissionManage.vue"),
|
||||
import("@/modules/admin/views/permissions/MenuManage.vue"),
|
||||
},
|
||||
{
|
||||
path: "settings",
|
||||
|
||||
Loading…
Reference in New Issue
Block a user