在Discuz!系统中实现禁止用户修改密码及设置,可通过以下三个层面的解决方案实现:
一、用户组权限控制(推荐方案)
1. 进入后台 → 用户 → 用户组 → 选择要限制的用户组 → 编辑
2. 在【基本设置】中找到:
- 允许修改密码:否
- 允许修改头像:否
3. 在【论坛相关】→ 帖子相关中关闭:
- 允许设置帖子权限:否
- 允许设置下载权限:否
4. 在【用户权限】中关闭:
- 允许实名认证:否
- 允许绑定手机:否
- 允许绑定QQ:否
二、模板层控制(适用于特殊需求)
1. 修改模板文件 template/default/home/spacecp_profile.htm
2. 注释或删除密码修改表单(约第320行):
- <!--
- <div class="bm">
- <h3 class="mbw">密码安全</h3>
- <div class="bm_c">
- <form method="post" autocomplete="off" action="home.php?mod=spacecp&ac=profile&op=password">
- <input type="password" name="oldpassword" />
- <input type="password" name="newpassword" />
- <button type="submit">提交</button>
- </form>
- </div>
- </div>
- -->
复制代码
三、接口层拦截(需要开发能力)
1. 创建插件拦截核心控制器:
- // source/plugin/restrict_operations/restrict_operations.class.php
- class plugin_restrict_operations extends discuz_plugin {
- public function spacecp_control_output() {
- global $_G;
- $ac = $_GET['ac'];
- $allowed_actions = array('base', 'contact'); // 允许的基础设置
-
- if (!in_array($ac, $allowed_actions)) {
- showmessage('操作已被管理员禁用');
- }
- }
- }
复制代码
2. 在插件配置中设置白名单操作
补充方案:数据库层限制
通过定时任务清空密码修改记录:
- UPDATE pre_common_member SET
- password = '固定加密值',
- salt = '固定盐值'
- WHERE uid IN (指定UID范围)
复制代码
注意事项:
1. 涉及模板修改时建议创建子模板
2. 核心代码修改需做好版本管理
3. 对第三方插件建议通过DZ插件网进行安全验证
4. 用户组方案不会影响管理组权限
5. 需同时关闭UCenter的独立密码修改入口
以上方案可根据实际需求组合使用,建议优先采用用户组权限控制方案,如需更细粒度控制可结合二次开发方案。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。 |