feat: 07 创作者中心批 1(账号绑定 + 我的作品 / 审核进度 / 通知)

为什么:创作者要在 Web 端(做进后台管理)看到自己的作品与审核进度,但 creator 模块
此前只有「后台审核视角」的服务,创作者本人没有任何入口;更要紧的是,全项目没有任何
地方把「后台账号」和「创作者主体」关联起来 —— 缺这层映射,横向越权就只能靠每个接口
自觉加 where 过滤,迟早会漏。所以批 1 先把归属判定的地基打好,再给工作台接口。

- creator 增加 admin_user_id(幂等 ALTER + 部分唯一索引,0 = 未绑定,多条 0 不冲突)
- 新增角色 creator 与权限点 creator-center:view(创作者角色 + 超管各授权一条),菜单等页面做好再挂
- 新增 CreatorCenterService:requireCurrentCreator() 是归属判定的唯一入口,requireMyDrama() 供后续批次复用
- 新增 /admin/creator-center 四个接口(profile / dramas/page / dramas/{id} / notices),
  一律不接收 creatorId,查询强制 where creator_id = 当前创作者,访问他人作品统一 403
- 通知不新建表:由入驻审核结果 + 内容提交审核结果派生(ops_notice 无产出方,等有公告功能再接)
- 顺手接通 drama.trailer_url:DDL 与实体早就有,但保存 VO / 响应 VO 都没带,预告片存不进也读不出
- ContentSubmissionService 补 typeText + TYPE_* 常量(通知文案与批 2 的提交都要用)
This commit is contained in:
Vicky committed 2026-10-15 13:45:32 +08:00
1 parent 8b261b71de
commit ea875c3e2b
14 files changed
+454

No files matched your search

+35
View File
@@ -163,3 +163,38 @@ CROSS JOIN sys_menu m
WHERE r.code = 'super_admin'
AND m.id IN (20, 21, 22, 23, 24, 25)
ON CONFLICT DO NOTHING;
-- ---------- 07 创作者中心:角色、权限点、授权 ----------
-- 创作者第一阶段直接登后台(复用 sys_admin_user + sys_role + sys_menu),
-- 这里只落"身份与权限";菜单等页面做出来再挂 —— 菜单先入库会让前端动态路由指向不存在的组件。
INSERT INTO sys_role_category (id, name, description, sort) VALUES
(4, '创作者', '外部内容创作者,只能管理自己的作品与数据', 4)
ON CONFLICT (id) DO UPDATE SET name = EXCLUDED.name, description = EXCLUDED.description, sort = EXCLUDED.sort;
INSERT INTO sys_role (id, name, code, category_id, level, description, status, is_builtin) VALUES
(5, '创作者', 'creator', 4, 5, '只能查看与编辑自己的作品与数据', 1, 0)
ON CONFLICT (id) DO UPDATE SET name = EXCLUDED.name, code = EXCLUDED.code,
description = EXCLUDED.description, category_id = EXCLUDED.category_id, level = EXCLUDED.level;
-- 权限点按批补:批 1 只有「进创作者中心」这一个,后面各批用到什么再幂等追加
INSERT INTO sys_permission (code, name, group_name, type, sort) VALUES
('creator-center:view', '访问创作者中心', '创作者中心', 'BUTTON', 150)
ON CONFLICT (code) DO NOTHING;
-- 创作者角色只拿创作者中心这几个点,不给任何后台运营权限
INSERT INTO sys_role_permission (role_id, permission_id)
SELECT r.id, p.id
FROM sys_role r
CROSS JOIN sys_permission p
WHERE r.code = 'creator'
AND p.code = 'creator-center:view'
ON CONFLICT DO NOTHING;
-- 超管也留一份,方便排查创作者视角的问题(超管没有绑定创作者主体,进 creator-center 仍会被挡)
INSERT INTO sys_role_permission (role_id, permission_id)
SELECT r.id, p.id
FROM sys_role r
CROSS JOIN sys_permission p
WHERE r.code = 'super_admin'
AND p.code = 'creator-center:view'
ON CONFLICT DO NOTHING;
+10
View File
@@ -903,3 +903,13 @@ COMMENT ON TABLE download_task IS '离线下载任务与断点续传进度(分
DROP TRIGGER IF EXISTS trg_download_task_updated_at ON download_task;
CREATE TRIGGER trg_download_task_updated_at BEFORE UPDATE ON download_task
FOR EACH ROW EXECUTE FUNCTION set_updated_at();
-- ============================================================
-- 九、07 创作者中心(Web 端):后台账号 ↔ 创作者主体
-- ============================================================
-- 第一阶段创作者直接登后台,身份复用 sys_admin_user / sys_role / sys_menu,
-- 所以 creator 需要一列账号映射;用「部分唯一索引」:
-- admin_user_id = 0 表示尚未绑定账号,多条 0 不冲突;绑定之后一账号只能对应一个创作者主体。
ALTER TABLE creator ADD COLUMN IF NOT EXISTS admin_user_id BIGINT NOT NULL DEFAULT 0;
CREATE UNIQUE INDEX IF NOT EXISTS uk_creator_admin_user ON creator (admin_user_id) WHERE admin_user_id > 0;
COMMENT ON COLUMN creator.admin_user_id IS '绑定的后台账号 sys_admin_user.id,0 表示未绑定(创作者中心据此判定归属)';