角色与鉴权
本页说明平台里有哪些角色、数据库种子记录了哪些权限标签,以及当前代码实际如何按账号状态、 角色、所有权和频道成员关系执行鉴权。
角色
平台只有两个角色,每个用户在同一时刻只属于其中之一。
| 角色 | 名称 | 说明 |
|---|---|---|
ADMIN | 管理员 | 拥有全部管理能力:业务入口内联在各功能页面;控制台、站点设置、AI 配置、附件和操作日志位于 /admin;倒计时在首页配置 |
MEMBER | 成员 | 普通社员,可查看协作内容、维护自己的资料与工作日志、提交工单、参与任务 |
权限码目前是元数据,不是动态授权引擎
Role.permissions 中保存了下面的字符串列表,但当前运行时代码不会逐项读取这些字符串决定放行。
服务端主要使用 requireActiveUser、requireAdmin 和各模块的对象级检查。因此,不能通过直接修改
某个角色的权限数组来获得细粒度授权;下表用于解释既有标签,实际行为以本页“当前实际规则”为准。
种子权限元数据
下表来自 prisma/seed.ts(✅ 表示该字符串写入对应角色,— 表示没有写入)。
| 权限码 | 含义 | ADMIN | MEMBER |
|---|---|---|---|
dashboard:view | 查看工作台(仪表盘)总览 | ✅ | ✅ |
members:view | 查看成员名录 | ✅ | ✅ |
members:manage | 管理成员(编辑资料、调整角色、启用/禁用、生成/停用邀请码) | ✅ | — |
approvals:manage | 处理待审批账号 | ✅ | — |
groups:manage | 管理部门(创建、编辑、归档、删除、分配成员) | ✅ | — |
tasks:view | 查看任务 | ✅ | ✅ |
tasks:manage | 管理任务(创建、指派、编辑、关闭) | ✅ | — |
tickets:view | 查看工单 | ✅ | ✅ |
tickets:manage | 管理工单(处理、变更状态、以管理员身份回复) | ✅ | — |
documents:view | 查看文档 | ✅ | ✅ |
documents:manage | 管理文档(创建、导入、编辑、发布、删除) | ✅ | — |
announcements:manage | 管理公告(发布、编辑、置顶、删除) | ✅ | — |
settings:manage | 管理站点设置(站点名称、注册开关、语言、主题等) | ✅ | — |
audit:view | 查看审计日志 | ✅ | — |
profile:edit | 编辑自己的个人资料 | — | ✅ |
worklogs:view | 查看并维护自己的工作日志 | — | ✅ |
原始列表
- ADMIN:
dashboard:view、members:view、members:manage、approvals:manage、groups:manage、tasks:view、tasks:manage、tickets:view、tickets:manage、documents:view、documents:manage、announcements:manage、settings:manage、audit:view。 - MEMBER:
dashboard:view、members:view、tasks:view、tickets:view、documents:view、profile:edit、worklogs:view。
元数据与实际行为的一个明显差异
ADMIN 元数据没有 profile:edit 或 worklogs:view,但管理员仍可编辑自己的资料、维护自己的
日志,并可删除其他成员的日志。这是因为相关 Server Action 检查的是已激活账号、本人所有权或
管理员角色,而不是这两个权限字符串。
当前实际规则
已激活的 MEMBER 可以:
- 查看任务、工单、文档、成员名录与工作台。
- 编辑自己的资料、创建和维护自己的工作日志;其他成员可以阅读其最近 8 条日志。
- 创建工单,并在任一可见、未关闭的工单下发表评论;评论作者可删除自己的评论。
- 在自己是主指派用户或所属部门是主指派部门时,给任务添加进展、更新非
CLOSED状态并上传附件。 - 使用聊天(社团总群、开放论坛、所在部门频道、私聊,含 @提及、投票、接龙报名)并 设置自己的在线状态。AI 的只读、自有设置与管理员工具边界见 AI 助手。
ADMIN 在此基础上可以进入后台,并执行成员与邀请码、部门、任务、工单、文档、公告、
站点设置、AI 配置与审计日志等管理操作;管理员还可删除任意工单评论和工作日志。
这些管理入口大多内联在对应的功能页面上。各模块的具体用法见 聊天、任务、
工单、文档、部门、
成员目录、个人资料。
鉴权机制
鉴权不是只在前端隐藏按钮,而是在服务端执行。核心是三个守卫函数:
| 守卫 | 作用 | 不满足时 |
|---|---|---|
requireAuth | 要求已登录(存在有效会话) | 引导至登录页 |
requireActiveUser | 要求账号状态为 ACTIVE | PENDING 被引导到等待页,其他非激活状态不能使用工作区 |
requireAdmin | 要求角色为 ADMIN | 引导至 /forbidden |
此外还有对象级规则:
- 受保护的 Server Action 会重新检查账号或管理员角色,不依赖按钮是否可见。
- 后台布局用
requireAdmin统一拦截:非管理员访问/admin下任意页面都会被引导到/forbidden。 - 任务贡献检查主指派用户 / 部门;评论与日志删除检查作者或管理员;聊天检查频道成员关系; AI 工具继续检查调用者角色、目标频道和确认编号。
- 账号状态也参与鉴权:只有
ACTIVE用户能正常使用工作区,详见账号状态。
提示
如果你是管理员却发现某个后台入口点不动,先确认自己的账号状态是否为「已激活」, 再确认角色是否为管理员。两道校验都通过才会放行。管理端总览见 后台总览。