身份组与权限
本文说明 ProjectWikit 如何判定一个账号可以做什么:身份组、权限列表、按分类的权限覆盖、站点可对成员施加的处置,以及哪些权力属于整个实例而非单个站点。相关设置所在的界面参见站点管理。
ProjectWikit 的权限细分到每一项事务,管理后台的每一屏也各由一条权限控制。因此,您可以只给一个身份组 工单管理 中的权限并允许它进入管理后台,由此设立类似「工单审查员」「申请书审查员」的职位:他们只处理自己负责的事务,而不必掌握整个管理后台。
模型
一个 ProjectWikit 实例可以承载一个或多个站点。
- 账号属于实例。 同一个账号可以登录实例中的每个站点,其用户名、显示名、邮箱与个人资料在各站点完全相同。
- 身份组属于单个站点。 在一个站点持有身份组,不会在另一个站点带来任何权限。
- 权限来自身份组。 账号在某站点的权限,由其在该站点持有的身份组共同决定。
- 超级管理员不受上述规则约束。 启用状态的超级管理员在实例的每个站点拥有全部权限,且不受任何处置影响。
每个站点有两个内置身份组,它们从不手工分配:
| 身份组 | 持有者 |
|---|---|
everyone | 所有访客,无论是否登录 |
registered | 所有已登录账号 |
为账号分配的身份组叠加在这两个之上。
用 pwikit createsite 新建的站点还预置了 admin 与 member 两个普通身份组,可以修改或删除,见站点管理。
身份组包含什么
每个身份组对每条权限持有一个取值:
| 取值 | 含义 |
|---|---|
| 允许 | 该身份组授予这条权限 |
| 拒绝 | 该身份组拒绝这条权限,且拒绝优先于任何授予 |
| 继承 | 该身份组不做规定,交由其他身份组决定。所持身份组都没有授予时,账号没有这条权限 |
注意继承 与 拒绝 都不授予权限,但效果完全不同。继承 只是该身份组不表态,成员持有的其他身份组(包括
everyone与registered)只要有一个允许,成员就有这条权限。拒绝 会压过其他所有身份组的允许,只要成员持有的任一身份组拒绝了某条权限,无论其他身份组如何设置,成员都没有它。如仅需某个身份组不授予某条权限,请使用 继承。在
everyone或registered上设为 拒绝,将使超级管理员以外的所有人失去该权限。
身份组还带有两项设置:
- 可进入管理后台:决定该身份组能否进入管理后台。进入后台之后,每一屏另需相应权限。
- 权限级别:决定谁可以修改谁。账号只能修改权限级别数值大于自己的账号。超级管理员可以修改任何账号。
判定顺序
针对某个账号、某个站点、某个页面或论坛对象,按以下顺序判定:
- 已停用的账号没有任何权限,包括浏览。
- 启用状态的超级管理员拥有全部权限,后续步骤不再适用。
- 合并所持全部身份组的授予。 任一身份组授予的权限即为授予。
- 分类覆盖替换身份组的取值,仅对该分类下的页面生效,详见下文。
- 应用全部拒绝。 只要有一个所持身份组拒绝某条权限,或分类覆盖对该身份组拒绝了它,该账号就没有这条权限,即使另一个身份组授予了它。
- 应用对象规则。 锁定的页面与论坛主题、作者身份与隐藏的论坛版块会调整结果,见锁定、作者与论坛。
- 站点要求验证邮箱时,未验证的账号失去写入类权限。 参见注册与账号。
- 最后应用站点处置。 参见成员处置。
分类覆盖
每个页面分类都可以覆盖某个身份组的取值,仅对该分类下的页面及其评论主题生效。覆盖在管理后台的页面分类屏中设置,只涉及文章与论坛两组权限,其余权限始终按整个站点判断。覆盖中设为 允许 或 拒绝 的项替换该身份组在这些权限上的取值,设为 继承 的项保持身份组自身的取值。
常见用法:
- 设立
sandbox分类,在其中为registered允许 创建文章 与 编辑文章。 - 设立
admin分类,在其中为everyone与registered拒绝 浏览文章,仅在该分类中允许浏览的身份组可以阅读这些页面。
覆盖无法找回另一个身份组拒绝掉的权限,因为第 5 步在覆盖之后执行。若要只在某个分类授予某条权限,需确认该账号所持的身份组中没有任何一个拒绝它。
锁定、作者与论坛
| 情形 | 效果 |
|---|---|
| 页面已锁定 | 没有 锁定文章 权限的账号在该页面上失去 编辑文章、编辑文章标签、移动文章、管理文章文件、删除文章 与 管理文章作者 |
| 账号是未锁定页面的作者 | 在该页面上获得 管理文章作者。锁定的页面不给作者额外权限 |
| 账号发起了论坛主题 | 可以编辑该论坛主题 |
| 账号撰写了帖子 | 在站点上拥有 创建论坛帖子 权限期间,可以编辑自己的帖子 |
| 论坛主题已锁定 | 没有 锁定论坛主题 权限的账号不能评论、回复、编辑或删除帖子,也不能编辑、置顶或移动该论坛主题 |
| 账号的论坛发言被停用(论坛启用 或 论坛停用至) | 在所有论坛主题中受到与锁定论坛主题相同的限制 |
| 版块为 仅管理员可见 | 需要 浏览隐藏的论坛版块 权限才能看到 |
权限列表
权限分为 文章、论坛、用户互动、工单管理、成员处置 与 管理后台 六组。其中两组需要先了解:
- 成员处置 决定管理员可以对本站点的成员做什么。下文每种处置各有一条权限,因此「可以禁言」与「可以封禁」是分开授予的。
- 管理后台 决定哪些屏可以打开。持有 管理用户 可以打开成员列表与成员页面;要对成员执行处置,仍需 成员处置 组中的相应权限。
权限表中同时显示每项权限的名称与代码。
| 权限 | 代码 | 允许的操作 |
|---|---|---|
| 文章 | ||
| 浏览文章 | view_articles | 阅读页面 |
| 为文章评分 | rate_articles | 为页面评分 |
| 创建文章 | create_articles | 创建页面 |
| 编辑文章 | edit_articles | 编辑源代码、标题与父页面,回退版本;可打开 页面 屏 |
| 编辑文章标签 | tag_articles | 更改页面标签 |
| 移动文章 | move_articles | 重命名与移动页面 |
| 锁定文章 | lock_articles | 锁定与解锁页面,并在锁定的页面上保留全部权限 |
| 管理文章文件 | manage_article_files | 上传、重命名与删除附件 |
| 删除文章 | delete_articles | 删除页面 |
| 重置文章评分 | reset_article_votes | 清空页面的全部投票 |
| 评论文章 | comment_articles | 发表页面评论 |
| 查看文章评论 | view_article_comments | 阅读页面评论 |
| 管理文章作者 | manage_article_authors | 更改页面作者,还需要 编辑文章 |
| 论坛 | ||
| 浏览论坛帖子 | view_forum_posts | 阅读帖子 |
| 创建论坛帖子 | create_forum_posts | 在论坛主题中回复 |
| 编辑论坛帖子 | edit_forum_posts | 编辑任何人的帖子 |
| 删除论坛帖子 | delete_forum_posts | 删除帖子 |
| 浏览论坛主题 | view_forum_threads | 阅读论坛主题 |
| 创建论坛主题 | create_forum_threads | 发起论坛主题 |
| 编辑论坛主题 | edit_forum_threads | 更改任何论坛主题的标题与简介 |
| 置顶论坛主题 | pin_forum_threads | 置顶论坛主题 |
| 锁定论坛主题 | lock_forum_threads | 锁定论坛主题,并在锁定的论坛主题中发帖 |
| 移动论坛主题 | move_forum_threads | 将论坛主题移动到其他论坛分类 |
| 浏览论坛版块 | view_forum_sections | 查看论坛版块 |
| 浏览隐藏的论坛版块 | view_hidden_forum_sections | 查看标记为 仅管理员可见 的版块 |
| 浏览论坛分类 | view_forum_categories | 查看论坛分类 |
| 用户互动 | ||
| 发送私信 | send_direct_message | 发送私信 |
| 工单管理 | ||
| 查看用户检举 | view_user_reports | 用户检举 屏 |
| 查看用户工单 | view_user_tickets | 支持工单 屏 |
| 审核入组申请 | review_membership_applications | 入组申请 屏 |
| 成员处置 | ||
| 封禁成员 | ban_members | 在本站点封禁成员 |
| 禁言成员 | mute_members | 在本站点禁言成员 |
| 禁止成员编辑 | restrict_member_editing | 在本站点收回成员的页面编辑能力 |
| 禁止成员评分 | restrict_member_rating | 在本站点收回成员的评分能力 |
| 重置成员评分 | reset_member_votes | 清除成员在本站点投出的全部票 |
| 邀请成员 | invite_members | 新建账号、邀请链接、认领链接与激活账号 |
| 管理机器人账号 | manage_bots | 新建机器人账号 |
| 管理后台 | ||
| 管理用户 | manage_users | 打开 用户、邀请链接 屏与成员页面 |
| 管理身份组 | manage_roles | 身份组 与 身份组分类 屏 |
| 管理站点 | manage_site | 站点设置 与 主题 屏 |
| 查看操作记录 | view_actions_log | 操作记录 屏与仪表板上的最近操作 |
| 管理分类 | manage_categories | 页面分类 屏 |
| 管理标签 | manage_tags | 标签 与 标签分类 屏 |
| 管理论坛 | manage_forum | 三个论坛屏 |
| 查看敏感信息 | view_sensitive_info | 账号的邮箱地址 |
| 查看投票时间 | view_votes_timestamp | 在评分明细与账号动态中查看每一票的时间 |
| 管理系统更新 | manage_updates | 目前没有作用 |
| 管理权限设置 | manage_permissions | 权限表、分类权限覆盖、分配身份组、站点设置中的身份组字段,以及入组申请通过后发放的身份组 |
成员处置
处置是某个站点对其成员收回的能力。处置按站点记录:同一个账号可以在实例的一个站点被封禁,而在另一个站点不受影响。
| 处置 | 收回什么 | 需要的权限 |
|---|---|---|
| 封禁 | 另外三项收回的全部内容 | 封禁成员 |
| 禁言 | 发表评论、发起论坛主题、回复、编辑与删除帖子、编辑与置顶及移动论坛主题 | 禁言成员 |
| 禁止编辑 | 创建、编辑、打标签、移动、锁定与删除页面,管理附件与作者,重置投票 | 禁止成员编辑 |
| 禁止评分 | 对页面评分 | 禁止成员评分 |
以下规则对四种处置都成立:
- 被处置的成员仍可浏览。 阅读页面、评论与论坛的能力不会被收回,登录也照常可用。
- 私信不会被收回,因为它不属于任何单个站点。
- 处置可以设置到期时间。 到期后自动失效,记录仍保留在成员页面上。留空表示长期有效,直到有人解除。
- 每项处置都可以记录理由。
- 超级管理员不受处置影响。
处置在管理后台的成员页面上的 本站处置 一节中设置。每项处置只对持有相应权限的账号显示。
站点权力与实例权力
账号本身由实例中的所有站点共用,因此写在账号上的一切都保留给超级管理员。站点管理员的处置只在本站点内生效。
| 操作 | 由谁执行 | 影响范围 |
|---|---|---|
| 封禁、禁言、禁止编辑、禁止评分 | 持有相应权限的身份组 | 本站点 |
| 清除成员投出的票 | 重置成员评分 | 本站点 |
| 分配身份组 | 管理权限设置 | 本站点 |
| 新建账号、邀请链接、认领链接、机器人 | 邀请成员 / 管理机器人账号 | 本站点 |
| 修改用户名、显示名、简介或邮箱 | 超级管理员 | 整个实例 |
| 停用账号,使其无法在任何站点登录 | 超级管理员 | 整个实例 |
| 在整个实例范围内关闭账号的论坛功能 | 超级管理员 | 整个实例 |
| 收回账号的私信功能 | 超级管理员 | 整个实例 |
| 授予或取消超级管理员 | 超级管理员 | 整个实例 |
在成员页面上,非超级管理员的管理员只能看到这些账号设置的当前取值,无法进行更改。
与 Wikidot 的不同
| Wikidot | ProjectWikit | |
|---|---|---|
| 谁能做什么 | 固定的几类身份:任何人、成员、版主、管理员 | 任意数量的身份组,每个身份组对每条权限各有取值 |
| 权限粒度 | 每个分类对每种操作一项设置 | 每种操作一条独立权限,且任一分类可为任一身份组覆盖其中任意一条 |
| 同时持有多重身份 | 成员只属于一类 | 账号可持有任意多个身份组,授予相加,任一拒绝即为拒绝 |
| 封禁 | 把成员挡在站点之外 | 每个站点四种独立处置,各自可设到期时间,账号本身不受影响 |
| 账号级处置 | 不适用 | 保留给超级管理员 |
| 设置所在位置 | Site Manager | 管理后台,参见站点管理 |
Wikidot 的按分类权限表没有直接对应物,因为这里的分类覆盖针对的是身份组而非固定身份。若要复现 Wikidot 的配置,可为原先的每一类身份各建一个身份组,再为各分类添加针对这些身份组的覆盖。
