2.2 论坛版块与用户组权限设计

版块怎么切、用户组怎么配,才能既不越权也不别扭。

版块是空间的划分,用户组是身份的划分,两者交叉处就是权限。Discuz! 的权限设计看着简单,实际最常翻车的是三种:版块建多了没人回帖、给版主开的权限过大导致误删、游客能看见版块却点进去提示无权限。菜单名称在不同版本间略有差异,以你后台实际看到的为准。

版块设计的四条原则

一个版块解决一类话题。 判断标准很朴素:一个人进这个版块,心里预期的是不是同一件事?版块名叫「技术交流」,里面同时有求助、招聘、晒配置单、吐槽,它就是个垃圾桶——用户找不到自己的问题,版主也维护不了。

按受众切,不按内容切。 常见错误是按内容形式建版块:「教程区」「问答区」「分享区」。同一批运维人群既要提问又要分享,硬拆三个版块,后果是同一个用户到处各挂身份。合理切法是按人:「新手互助区」「资深交流区」。

先少后多。 新站从 5~8 个版块起步,跑满三个月再拆。第一天就建 30 个版块、每个只有 1 个主题,首页比论坛本体还长。

留一个「水区」。 闲聊、灌水、发帖打卡要有地方安置,压到暗处只会跑到站外。

命名与描述:两句之内说清边界

版块名控制在 4 个字以内,超过的放进描述。描述出现在版块列表和主题页顶部,是用户判断「该在这里发帖」的唯一依据。一句话回答:能发什么、不能发什么、发帖要什么格式。

版块 描述写法(正例)
环境搭建 部署 LAMP/Nginx、域名与证书配置。提问请附系统版本与报错原文
故障排查 线上问题求助帖。发帖必附:时间点、影响范围、已排查项
版本公告 仅管理员发布更新通知,成员问题发「故障排查」

反例是「欢迎大家交流经验」——不传递边界信息,等于没写。

图标、排序与版块属性

图标在「论坛 → 版块管理」里设置,按 Discuz! 默认风格给的规格走,前提是风格统一。置顶版块不超过 3 个,超过就等于没置顶。

属性里几项值得单独提:「允许发图片/链接/视频」默认全开是灌水温床,新人区关链接能挡掉大量广告;「主题阅读模式」设为「只看楼主」后用户默认只加载首楼,长帖体验明显变好;「帖子编辑间隔」设成 60~300 秒能压掉秒发广告。

三层权限怎么叠加

Discuz! 的权限判断不是查一张表,而是三层取交集。理解这一点,才能解释「为什么我明明是版主却看不到版块」。

层级 配置位置 管什么
一:版块权限 论坛 → 版块 → 权限设置 这个版块对哪些身份开放
二:用户组权限 用户 → 权限管理 这个组在全站能做什么
三:版块特殊权限 权限页的「高级权限」 指定用户/组对单个版块的例外

三层是相乘取最小的关系:任何一层禁止,整体就禁止。所以「用户组允许发表、版块权限也允许,但高级权限里把某个用户单独禁止,他依然发不了」并不奇怪。第三层最常见的用途是临时禁言:不动用户组,直接在版块高级权限里把某个 ID 设为只读。

排查的标准动作是打印当前用户的实际能力:

// 放在自定义模块里做权限自检,需先 $discuz->init()
$uid = 123;
$member = C::t('common_member')->fetch($uid);
echo '用户组: '.$member['groupid'].PHP_EOL;

版块侧字段用 C::t('forum_forumfield')->fetch($fid) 取,字段名以你的数据字典为准。批量核对时也可直接查库对账:

-- 各版块的第一层权限设置,0 表示所有人、3 表示注册用户
SELECT fid, viewperm, postperm FROM pre_forum_forumfield WHERE fid IN (2, 3, 4);

用户组体系:主组、扩展组与继承

「用户 → 用户组」里有两类:系统组(管理员、超级版主、论坛版主、注册用户、游客等,默认存在,部分不可删除)与扩展用户组(你自己建的)。系统组决定基础身份与全局权限,扩展组做精细化授权。

每个用户有且仅有一个主用户组,但可同时属于多个扩展组,扩展组权限叠加。「继承」指扩展组可继承其他组作基础权限再加例外项——建议扩展组继承「注册用户」且只写差异项,不会因注册用户权限调整而漏改。

典型用户组权限配置表

适合大多数技术型社区,可直接作起点:

用户组 类型 浏览/发主题/回复/上传 特殊说明
游客 系统组 仅浏览开放版块 多数版块设「游客只读」
注册用户 系统组 浏览 + 发主题 + 回复 + 上传 落地页引导升级
活跃用户 扩展组 同上,另加发链接、签名档 HTML 按积分自动升
版主 扩展组 另加置顶、加精、移动/锁定主题 只在指定版块授权
管理组 系统组 后台全部功能 控制在 2~3 人

关键在最后两行:版主权限不要在用户组层面给,要给到「版主」扩展组再逐版块授权。后台「论坛 → 版块管理 → 权限设置」里有专门的「版主」授权入口,选账号、指定版块。离开这个入口、在用户组里给「版主」组开批量删除权限,等于让所有版主都能删所有版块的主题。

权限相乘的四个实战坑

论坛模式选错。 「论坛 → 论坛设置」里的论坛模式(列表 / 一个个看 / 主题列表 / 混合)决定展示形态,选错会出现「权限全对但用户找不到发帖入口」。

扩展组忘了勾「应用到全部版块」。 漏勾就会出现「这个版块能回帖、那个不能」的鬼故事。

游客权限与 SEO 冲突。 游客不能看版块,搜索引擎也进不去;只读即可,不必禁止。

升降级用错入口。 转组在「用户管理 → 选中用户 → 更多操作 → 修改用户组」,资料页的「组别」字段只显示归属。

顺带一条:附件上限别只改后台。全站设 20M 而 php.ini 只有 8M 时,表现是「大附件永远上传失败」且不报错。

上线前自查清单

检查项 期望状态
游客访问开放版块 只读,不能发
未审核用户的帖子 进审核队列
版主的置顶/加精 仅指定版块
管理组后台入口 与「安全 → 后台权限」一致

取舍很简单:先按最小权限开,跑顺了再加。论坛权限体系像公司的报销制度——定严了审核的人会累死,全放开账就烂了。