根据Discuz系统底层逻辑和用户组权限特性,可通过以下两种方式实现动态查看权限控制:
方法一:模板层权限判断(快速生效)
1. 打开模板文件:/template/default/home/space_activity.htm
2. 在动态列表容器外添加权限判断:
- <!--{if !$_G['uid'] || ($_G['adminid'] > 0 || $_G['group']['allowstickthread'])}-->
- <div class="activity-list">
- ...
- </div>
- <!--{else}-->
- <div class="alert alert_error">无权限查看动态</div>
- <!--{/if}-->
复制代码
*注:这里使用版主特有的allowstickthread权限标识做判断,避免直接暴露管理员组ID*
方法二:控制器层权限拦截(推荐)
1. 创建插件文件 /source/plugin/restrict_activity/restrict_activity.class.php
- <?php
- class plugin_restrict_activity {
- public function home_controller_activity_before() {
- global $_G;
- if(!$_G['adminid'] && !$_G['group']['allowmodpost']) {
- showmessage('无权限访问动态页面', '', array(), array('login' => 1));
- }
- }
- }
复制代码
2. 创建插件配置文件 /source/plugin/restrict_activity/plugin.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <root>
- <plugin>
- <id>restrict_activity</id>
- <name>动态访问控制</name>
- <version>1.0</version>
- <description>限制普通用户查看动态</description>
- <modules>
- <home>
- <index>1</index>
- </home>
- </modules>
- </plugin>
- </root>
复制代码
注意事项:
1. $_G['adminid']>0 表示管理员组
2. allowmodpost权限标识用于判断版主身份
3. 手机版需要单独处理,可复制上述逻辑到移动端控制器
4. 修改后需到后台更新模板缓存
5. 建议通过插件机制实现以避免系统升级覆盖修改
进阶方案:
可配合用户组扩展权限字段,在后台创建新的权限节点:
1. 在source/admincp/admincp_perm.php添加权限定义
2. 在source/language/lang_admincp_perm.php添加权限描述
3. 在模板中使用$_G['group']['新权限标识']进行判断
该方案完整实现了动态查看权限的精细化控制,同时保持系统升级的兼容性。对于需要更复杂权限规则的场景,建议在DZ插件网查阅权限控制开发专题文档。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。 |