Files
yunzerwebsiteallinone/go/docs/sql/alter_system_menu_require_login.sql
T
2026-11-03 11:13:59 +08:00

50 lines
2.3 KiB
SQL
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.
-- =============================================================
-- yz_system_menu 增加「是否必须登录」字段 require_login
--
-- 用途:免登录控制从模块级下沉到菜单级——Platform 菜单管理逐条配置
-- 某菜单(功能入口)是否允许移动端游客(持游客令牌)免登录使用。
-- 1 = 必须登录(默认,保持既有行为)
-- 0 = 可免登录使用(进入 nav 公开菜单 /api/menus/public)
--
-- 关联:yz_system_modules.require_login 保留但移动端不再作为判定依据,
-- 以菜单级开关为准(模块宫格是否可点 = 该模块下存在免登录菜单)。
--
-- 幂等:MySQL 的 ALTER TABLE ADD COLUMN 不支持 IF NOT EXISTS,
-- 重复执行会报 1060 Duplicate column name。这里用 information_schema
-- 判断列是否存在,缺失才拼 ADD COLUMN,再通过 PREPARE 执行。
-- 约定:本脚本在 mysql 客户端手动执行(同一会话保持 PREPARE 生效)。
-- =============================================================
SET @sql := CONCAT(
'ALTER TABLE `yz_system_menu` ',
IF(
(SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'yz_system_menu'
AND COLUMN_NAME = 'require_login') = 0,
'ADD COLUMN `require_login` TINYINT NOT NULL DEFAULT 1 COMMENT ''1=必须登录 0=可免登录使用'' AFTER `is_visible`',
''
)
);
-- 列已存在时 @sql 仅剩 'ALTER TABLE `yz_system_menu` ',替换为无害语句
SET @sql := IF(RIGHT(TRIM(@sql), 1) = '`', 'SELECT 1 AS column_already_exists', @sql);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- =============================================================
-- 初始放开「便捷工具」的三个免登录功能(确认菜单标题后再执行):
--
-- SELECT id, title, path FROM `yz_system_menu`
-- WHERE title IN ('记事本', '日程提醒', '账号管理') AND delete_time IS NULL;
--
-- UPDATE `yz_system_menu`
-- SET `require_login` = 0
-- WHERE title IN ('记事本', '日程提醒', '账号管理');
--
-- 说明:父级目录菜单如需游客可见,也要一并置 0;
-- 后续新模块按需放开,全部走 Platform 菜单管理界面配置。
-- =============================================================