- 前端: 所有界面显示、i18n 文本、组件中的品牌名称 - 后端: 服务层、设置默认值、邮件模板、安装向导 - 数据库: 迁移脚本注释 - 保持功能完全一致,仅更改品牌名称 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
21 lines
848 B
SQL
21 lines
848 B
SQL
-- Add user_allowed_groups join table to replace users.allowed_groups (BIGINT[]).
|
|
-- Phase 1: create table + backfill from the legacy array column.
|
|
|
|
CREATE TABLE IF NOT EXISTS user_allowed_groups (
|
|
user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
group_id BIGINT NOT NULL REFERENCES groups(id) ON DELETE CASCADE,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
PRIMARY KEY (user_id, group_id)
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_user_allowed_groups_group_id ON user_allowed_groups(group_id);
|
|
|
|
-- Backfill from the legacy users.allowed_groups array.
|
|
INSERT INTO user_allowed_groups (user_id, group_id)
|
|
SELECT u.id, x.group_id
|
|
FROM users u
|
|
CROSS JOIN LATERAL unnest(u.allowed_groups) AS x(group_id)
|
|
JOIN groups g ON g.id = x.group_id
|
|
WHERE u.allowed_groups IS NOT NULL
|
|
ON CONFLICT DO NOTHING;
|