让Discuz某些指定版块的发帖时的默认权限不为0,为其他的数值

2014-10-23 13:34 栏目:技术开发 查看(23203)

有时候我们有这样的需求:论坛有几十个版块,但要某一个版块或者多个版块实现游客和普通用户及管理员都能浏览版块列表,而只有管理员(包含版主、超级版主、管理员)能访问具体的内页内容。大家可能马上想到去后台设置对应的内容。比如编辑某个版块的访问权限或者某个用户组的阅读权限。

但问题来了,dz默认的权限控制貌似不能实现我们的这个需求,比如你设置普通用户不能浏览版块,那么虽然确实实现不能浏览内容,但主题列表页不能浏览了。相应的我们去控制用户的阅读权限也是不行的。

那我能想到比较好处理的就有两种方式了:1、通过控制帖子内页来进行权限控制;2、通过发帖时的默认阅读权限进行控制。而接下来我们就说后面那一种,比如我们把默认的发帖时的默认阅读权限是100或者最高的255。

实现的效果就是这样:原来用户发帖的时候,如果他没有设置阅读权限的那么就是0,而就算有设置阅读权限的默认情况下也是0。而我们就要进行相应的设置默认的不是0,而是其他的数值。这里就提供一个思路了,首先找到设置阅读权限的HTML位置。结果是在template/default/forum/post_editor_attribute.htm,当然如果你的当前使用的模板有post_editor_attribute这个文件,就是找你当前模板中的这个文件。大概在60行左右有以下代码:
<select name=”readperm” id=”readperm” class=”ps” style=”width:90px” onchange=”extraCheck(1)”>
<option value=””>{lang unlimited}</option>
<!–{loop $_G['cache']['groupreadaccess'] $val}–>
<option value=”$val[readaccess]” title=”{lang readperm}: $val[readaccess]“{if $thread['readperm'] == $val[readaccess]} selected=”selected”{/if}>$val[grouptitle]</option>
<!–{/loop}–>
<option value=”255″{if $thread['readperm'] == 255} selected=”selected”{/if}>{lang highest_right}</option>
</select>
这里就是默认的选择阅读权限的地方,比如默认情况下就是
<option value=””>{lang unlimited}</option>
也就是说不限制阅读权限
现在假设我们需要给fid=5的版块默认权限为255。这个时候可以把上面改成中加入以下代码
<select name=”readperm” id=”readperm” class=”ps” style=”width:90px” onchange=”extraCheck(1)”>
<!–{if $_G[forum][fid]==5) }–>
<option value=”255″>最高权限</option>
<!–{else}–>
<!–{loop $_G['cache']['groupreadaccess'] $val}–>
<option value=”$val[readaccess]” title=”{lang readperm}: $val[readaccess]“{if $thread['readperm'] == $val[readaccess]} selected=”selected”{/if}>$val[grouptitle]</option>
<!–{/loop}–>
<!–{/if}–>
<option value=”255″{if $thread['readperm'] == 255} selected=”selected”{/if}>{lang highest_right}</option>
</select>
其实就是加入了
<!–{if $_G[forum][fid]==5) }–>
<option value=”255″>最高权限</option>
<!–{else}–>
意思是如果是是版块5就执行只有一个选项的,否则就是默认情况下的。
如果要控制多个版块的,那么则需要把
<!–{if $_G[forum][fid]==5) }–>
改成
<!–{if in_array($_G[forum][fid],array(5,6,7)) }–>
如果是把阅读权限弄成默认为100,则只需把<option value=”255″>最高权限</option>中的255改成一百就行了。
再高级一点,如果是要就算是5,6,7版块弄成管理员可以设置多个阅读权限,比如可以设置100以上,那么我们可以在
<option value=”100″>最高权限</option>下面在加一段
<!–{loop $_G['cache']['groupreadaccess'] $val}–>

<!–{if $val[readaccess]>=100}–>
<option value=”$val[readaccess]” title=”{lang readperm}: $val[readaccess]“{if $thread['readperm'] == $val[readaccess]} selected=”selected”{/if}>$val[grouptitle]</option>

<!–{/if}–>

<!–{/loop}–>

意思是如果后台设置的用户组的权限大于等于100则出现在这里可供选择的列表里面。

最后总结下,其实这只是一个简单的原理,大家可以进一步把它完善,比如可以写成更加人性化的插件。同时其实上面还是有一点问题的。比如说就按照最原始的的把版块5设置默认的阅读权限为255,但如果我发帖的时候可以用调试工具把value值修改为0或者其他的依然可以提交上去,然后生成的帖子就不是阅读权限为255了。因此还是有很多可以完善的地方,这个就留给大家吧。

与我们的项目经理联系
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流

转载请注明出处:让Discuz某些指定版块的发帖时的默认权限不为0,为其他的数值 - 微构网络
分享: