跳到主要内容

角色与鉴权

本页说明平台里有哪些角色、数据库种子记录了哪些权限标签,以及当前代码实际如何按账号状态、 角色、所有权和频道成员关系执行鉴权。

角色

平台只有两个角色,每个用户在同一时刻只属于其中之一。

角色名称说明
ADMIN管理员拥有全部管理能力:业务入口内联在各功能页面;控制台、站点设置、AI 配置、附件和操作日志位于 /admin;倒计时在首页配置
MEMBER成员普通社员,可查看协作内容、维护自己的资料与工作日志、提交工单、参与任务
权限码目前是元数据,不是动态授权引擎

Role.permissions 中保存了下面的字符串列表,但当前运行时代码不会逐项读取这些字符串决定放行。 服务端主要使用 requireActiveUserrequireAdmin 和各模块的对象级检查。因此,不能通过直接修改 某个角色的权限数组来获得细粒度授权;下表用于解释既有标签,实际行为以本页“当前实际规则”为准。

种子权限元数据

下表来自 prisma/seed.ts(✅ 表示该字符串写入对应角色,— 表示没有写入)。

权限码含义ADMINMEMBER
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查看并维护自己的工作日志

原始列表

  • ADMINdashboard:viewmembers:viewmembers:manageapprovals:managegroups:managetasks:viewtasks:managetickets:viewtickets:managedocuments:viewdocuments:manageannouncements:managesettings:manageaudit:view
  • MEMBERdashboard:viewmembers:viewtasks:viewtickets:viewdocuments:viewprofile:editworklogs:view
元数据与实际行为的一个明显差异

ADMIN 元数据没有 profile:editworklogs:view,但管理员仍可编辑自己的资料、维护自己的 日志,并可删除其他成员的日志。这是因为相关 Server Action 检查的是已激活账号、本人所有权或 管理员角色,而不是这两个权限字符串。

当前实际规则

已激活的 MEMBER 可以:

  • 查看任务、工单、文档、成员名录与工作台。
  • 编辑自己的资料、创建和维护自己的工作日志;其他成员可以阅读其最近 8 条日志。
  • 创建工单,并在任一可见、未关闭的工单下发表评论;评论作者可删除自己的评论。
  • 在自己是主指派用户或所属部门是主指派部门时,给任务添加进展、更新非 CLOSED 状态并上传附件。
  • 使用聊天(社团总群、开放论坛、所在部门频道、私聊,含 @提及、投票、接龙报名)并 设置自己的在线状态。AI 的只读、自有设置与管理员工具边界见 AI 助手

ADMIN 在此基础上可以进入后台,并执行成员与邀请码、部门、任务、工单、文档、公告、 站点设置、AI 配置与审计日志等管理操作;管理员还可删除任意工单评论和工作日志。 这些管理入口大多内联在对应的功能页面上。各模块的具体用法见 聊天任务工单文档部门成员目录个人资料

鉴权机制

鉴权不是只在前端隐藏按钮,而是在服务端执行。核心是三个守卫函数:

守卫作用不满足时
requireAuth要求已登录(存在有效会话)引导至登录页
requireActiveUser要求账号状态为 ACTIVEPENDING 被引导到等待页,其他非激活状态不能使用工作区
requireAdmin要求角色为 ADMIN引导至 /forbidden

此外还有对象级规则:

  • 受保护的 Server Action 会重新检查账号或管理员角色,不依赖按钮是否可见。
  • 后台布局用 requireAdmin 统一拦截:非管理员访问 /admin 下任意页面都会被引导到 /forbidden
  • 任务贡献检查主指派用户 / 部门;评论与日志删除检查作者或管理员;聊天检查频道成员关系; AI 工具继续检查调用者角色、目标频道和确认编号。
  • 账号状态也参与鉴权:只有 ACTIVE 用户能正常使用工作区,详见账号状态
提示

如果你是管理员却发现某个后台入口点不动,先确认自己的账号状态是否为「已激活」, 再确认角色是否为管理员。两道校验都通过才会放行。管理端总览见 后台总览