Discuz X3.* 根据用户权限关联版块
分类 网站技术/村民张先生 发布于 2019-04-01 14:46
我们在版块A的“扩展设置 - 关联群组/版块”中添加版块B的fid后,版块A中将会显示版块B的帖子,但无论游客还是任何登录用户,都会无区别的看到关联内容。如何进行权限控制呢,比如只让用户组1、2、3在版块A中可以看到版块B的内容,而游客和其它用户不可见。
打开 source/module/forum/forum_forumdisplay.php 文件,查找:
if($_G['forum']['relatedgroup']) { $relatedgroup = explode(',', $_G['forum']['relatedgroup']); $relatedgroup[] = $_G['fid']; $filterarr['inforum'] = $relatedgroup; } else { $filterarr['inforum'] = $_G['fid']; }
将其替换为:
if($_G['forum']['relatedgroup'] || $relatedgroup_c) { if($_G['forum']['relatedgroup'] && $relatedgroup_c) { $relatedgroup = explode(',', $_G['forum']['relatedgroup']); $relatedgroup_c = explode(',', $relatedgroup_c); $relatedgroup = array_merge($relatedgroup, $relatedgroup_c); } elseif(!$_G['forum']['relatedgroup']) { $relatedgroup = $_G['forum']['relatedgroup'] = explode(',', $relatedgroup_c); } else { $relatedgroup = explode(',', $_G['forum']['relatedgroup']); } $relatedgroup[] = $_G['fid']; $filterarr['inforum'] = $relatedgroup; } else { $filterarr['inforum'] = $_G['fid']; }
以上代码中增加了一个 $relatedgroup_c 变量,在其前方定义即可,例如:
if($_G['fid'] == '1' && in_array($_G['groupid'], array(1,2,3))) $relatedgroup_c = '5,6'; if($_G['fid'] == '2' && in_array($_G['groupid'], array(10,11))) $relatedgroup_c = '7';
表示在fid为1的版块中,用户组1/2/3浏览时关联版块5/6;在fid为2的版块中,用户组10/11浏览时关联版块7。可根据自己的需要做更多判断。
/2019-07-14 13:05希望继续更新DZ的相关修改资料。
/2019-08-12 17:11很用心的一个站。在Discuz有这么一个问题,不知道站长注意到没有?就是如果DZ站点某版块开启了审核,那么普通会员(非管理员)保存草稿的时候,帖子会直接进入审核,审核通过后,就直接发表了。换句话说,保存草稿就没有意义了!不知道站长有什么解决方法没?
我任何合理的流程是,点击“保存草稿”时,直接保存为草稿,等到点击“发表”的时候,才进入审核机制。