feat: 创作者中心支持超管只读代看(未绑定不再白屏)
为什么:/creator-center 菜单同时给了超管和创作者,但接口只认"绑定了 creator.admin_user_id 的账号", 而 creator 表为空 —— 超管点进去每个接口都 403,页面全白。这是设计缺口:需要一条"超管代看"的合法路径, 且必须既能让运营排查问题,又不能变成越权入口。 - requireCurrentCreator 改三级解析:① 绑定优先(创作者角色永远走这条)② 未绑定 + creator-center:impersonate + 请求头 X-Creator-Id → 只读代看 ③ 其余给可识别错误码(200004 未绑定 / 200005 未选目标) - 目标走独立请求头而不是查询参数:creator-center 接口继续"不接收 creatorId"; 且只有具备 impersonate 权限的账号这个头才生效 —— 创作者自己带也不影响"只看自己的" - 只读硬边界:代看态下作品编辑、分集增删改/排序、上传会话与产物挂载、提交/撤回、收费配置一律 200006 (写路径统一走 requireWritableDrama/requireWritable;上传会话在 MediaController 里用 ImpersonationGuard 拦) - 代看进入写 audit_log(AuditLog 实体 + AuditLogService,同人同目标 10 分钟去重),表本来就有、之前无代码引用 - 新增 GET /admin/creator-center/impersonation/targets(仅 impersonate)供顶部下拉取数 - 权限点 creator-center:impersonate 只授予 super_admin(content_operator 第一阶段不给) - 修掉菜单 26 的路由名冲突:它和 17 号菜单(创作者管理)都叫 CreatorCenter,Vue Router 同名路由互相覆盖, 导致超管整个 /creator-center 子树注册不上(点进去 404)。改名 CreatorWorkspace,并核对全表无重名 实测:创作者带 X-Creator-Id 仍只看自己的、仍能编辑自己的作品;代看下 9 个写操作全 403; audit_log 有且仅有一条代看记录(12 次代看请求去重成 1 条)。
This commit is contained in:
1 parent
a635de7111
commit
efeb9fcfaf
14 files changed
+351
-25
No files matched your search
+16
-1
@@ -185,6 +185,19 @@ INSERT INTO sys_permission (code, name, group_name, type, sort) VALUES
|
||||
('creator-center:stat:view', '创作者中心-查看看板', '创作者中心', 'BUTTON', 154)
|
||||
ON CONFLICT (code) DO NOTHING;
|
||||
|
||||
-- 代看创作者(只读):第一阶段只给超管,content_operator 不给
|
||||
INSERT INTO sys_permission (code, name, group_name, type, sort) VALUES
|
||||
('creator-center:impersonate', '代看创作者(只读)', '创作者中心', 'BUTTON', 155)
|
||||
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 = 'super_admin'
|
||||
AND p.code = 'creator-center:impersonate'
|
||||
ON CONFLICT DO NOTHING;
|
||||
|
||||
-- 创作者角色只拿创作者中心这几个点,不给任何后台运营权限
|
||||
INSERT INTO sys_role_permission (role_id, permission_id)
|
||||
SELECT r.id, p.id
|
||||
@@ -220,7 +233,9 @@ ON CONFLICT DO NOTHING;
|
||||
-- 组件路径对应 src/views/creator-center/ 下的四个页面。
|
||||
INSERT INTO sys_menu (id, parent_id, title, route_path, route_name, component, redirect, icon,
|
||||
permission_code, type, always_show, affix, sort, visible) VALUES
|
||||
(26, 0, '创作者中心', '/creator-center', 'CreatorCenter', '#', '/creator-center/workspace', 'ep:film', 'creator-center:view', 'CATALOG', 1, 0, 3, 1),
|
||||
-- route_name 必须全局唯一:17 号菜单(创作者管理)已经叫 CreatorCenter,
|
||||
-- 同名会让 Vue Router 后者覆盖前者、整个 /creator-center 子树注册不上(超管点进去就 404)
|
||||
(26, 0, '创作者中心', '/creator-center', 'CreatorWorkspace', '#', '/creator-center/workspace', 'ep:film', 'creator-center:view', 'CATALOG', 1, 0, 3, 1),
|
||||
(27, 26, '我的作品', 'workspace', 'creator-workspace', 'views/creator-center/WorkspaceView', '', '', 'creator-center:view', 'MENU', 0, 0, 1, 1),
|
||||
(28, 26, '作品编辑', 'dramas/:id', 'creator-drama-edit', 'views/creator-center/DramaEditView', '', '', 'creator-center:drama:edit', 'MENU', 0, 0, 2, 0),
|
||||
(29, 26, '收费配置', 'prices', 'creator-prices', 'views/creator-center/PriceConfigView', '', '', 'creator-center:price:update', 'MENU', 0, 0, 3, 1),
|
||||
|
||||
Reference in new issue
Block a user