pangu-user-platform/sql/fix_admin_permissions.sh

121 lines
3.9 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# ============================================================
# 脚本名称fix_admin_permissions.sh
# 功能说明:修复管理员角色菜单权限(添加所有菜单权限)
# 作 者pangu
# 创建时间2026-01-31
# 使用方法:./fix_admin_permissions.sh
# ============================================================
set -e
# 数据库配置
DB_HOST="8.148.25.55"
DB_PORT="3306"
DB_USER="root"
DB_PASS="aly2024A"
DB_NAME="pguser-db"
echo "============================================================"
echo "管理员角色菜单权限修复工具"
echo "============================================================"
echo ""
# 1. 检查当前管理员角色权限
echo "1. 检查当前管理员角色权限..."
mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASS" --default-character-set=utf8mb4 "$DB_NAME" -e "
SELECT
CASE
WHEN m.menu_id < 2000 THEN 'RuoYi系统菜单'
ELSE '盘古业务菜单'
END AS menu_type,
COUNT(*) as count
FROM sys_role_menu rm
INNER JOIN sys_menu m ON rm.menu_id = m.menu_id
WHERE rm.role_id = 1
GROUP BY CASE WHEN m.menu_id < 2000 THEN 'RuoYi系统菜单' ELSE '盘古业务菜单' END
WITH ROLLUP;
" 2>&1 | grep -v "Warning"
echo ""
echo "2. 菜单总数统计..."
mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASS" --default-character-set=utf8mb4 "$DB_NAME" -e "
SELECT
'系统菜单总数' AS item,
COUNT(*) as count
FROM sys_menu
UNION ALL
SELECT
'管理员已分配' AS item,
COUNT(*) as count
FROM sys_role_menu
WHERE role_id = 1;
" 2>&1 | grep -v "Warning"
echo ""
read -p "是否为管理员角色添加所有菜单权限?(y/n): " confirm
if [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then
echo ""
echo "正在修复管理员角色权限..."
# 备份当前权限
echo " - 创建权限备份..."
mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASS" --default-character-set=utf8mb4 "$DB_NAME" -e "
CREATE TABLE IF NOT EXISTS sys_role_menu_backup_$(date +%Y%m%d) AS
SELECT * FROM sys_role_menu WHERE role_id = 1;
" 2>&1 | grep -v "Warning"
# 删除现有权限
echo " - 清空现有权限..."
mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASS" --default-character-set=utf8mb4 "$DB_NAME" -e "
DELETE FROM sys_role_menu WHERE role_id = 1;
" 2>&1 | grep -v "Warning"
# 添加所有菜单权限
echo " - 添加所有菜单权限..."
mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASS" --default-character-set=utf8mb4 "$DB_NAME" -e "
INSERT INTO sys_role_menu (role_id, menu_id)
SELECT 1, menu_id FROM sys_menu;
" 2>&1 | grep -v "Warning"
echo ""
echo "✅ 权限修复完成!"
echo ""
echo "修复后的权限统计:"
mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASS" --default-character-set=utf8mb4 "$DB_NAME" -e "
SELECT
CASE
WHEN m.menu_id < 2000 THEN 'RuoYi系统菜单'
ELSE '盘古业务菜单'
END AS menu_type,
COUNT(*) as count
FROM sys_role_menu rm
INNER JOIN sys_menu m ON rm.menu_id = m.menu_id
WHERE rm.role_id = 1
GROUP BY CASE WHEN m.menu_id < 2000 THEN 'RuoYi系统菜单' ELSE '盘古业务菜单' END
WITH ROLLUP;
" 2>&1 | grep -v "Warning"
echo ""
echo "顶级菜单权限:"
mysql -h"$DB_HOST" -P"$DB_PORT" -u"$DB_USER" -p"$DB_PASS" --default-character-set=utf8mb4 "$DB_NAME" -e "
SELECT m.menu_id, m.menu_name, m.order_num
FROM sys_menu m
INNER JOIN sys_role_menu rm ON m.menu_id = rm.menu_id
WHERE rm.role_id = 1 AND m.parent_id = 0
ORDER BY m.order_num;
" 2>&1 | grep -v "Warning"
echo ""
echo "⚠️ 请退出登录并重新登录,菜单权限才会生效!"
else
echo ""
echo "❌ 操作已取消"
fi
echo ""
echo "============================================================"
echo "修复完成!"
echo "============================================================"