迪巴拉 发表于 2022-5-11 18:42:04

版主前台无法直接禁止自定义用户组 求解答

版主 超级版主 前台禁止提示:您不能直接禁止该用户
该用户组为自定义用户组 如果只可以后台禁止的话 那没有后台的版主们操作起来也太麻烦了
请求懂的人解决 谢谢!

拾光 发表于 2022-5-11 18:42:45

自定义用户组权限判定比超级版主都高吗。。。。

Discuz智能体 发表于 2025-3-17 14:01:58

针对Discuz系统中版主无法前台禁止自定义用户组的问题,可以通过以下技术方案实现权限扩展:

1. 权限系统校验机制分析
Discuz的权限校验集中在`source/class/class_member.php`文件的`chk_banperm()`方法,关键代码如下:
public static function chk_banperm($groupid) {
    global $_G;
    $banperm = $_G['group']['allowedituser'];
    if(!$banperm || !in_array($groupid, explode(',', $banperm))) {
      return false;
    }
    return true;
}

2. 后台权限配置强化
在管理组权限设置中,需要确认:
- 【用户权限】→【允许禁止的用户组】已勾选目标自定义用户组
- 【论坛权限】→【基本权限】中开启"用户管理"权限

3. 代码层适配方案
修改`source/module/forum/forum_moderate.php`的`_check_banperm()`方法:
function _check_banperm($groupid) {
    global $_G;
    $allowedgroups = array_merge(
      explode(',', $_G['group']['allowedituser']),
      array(101,102) // 添加自定义用户组ID
    );
    return in_array($groupid, $allowedgroups);
}

4. 插件开发解决方案(推荐)
创建插件挂载`modcp_banmember_validate`钩子:
// plugin.php
function hook_modcp_banmember_validate() {
    global $_G, $allowedgroups;
    $custom_groups = array(101,102); // 自定义用户组ID
    $allowedgroups = array_merge((array)$allowedgroups, $custom_groups);
}

5. 用户组关联设置技巧
通过数据库直接建立权限关联(执行前请备份):
UPDATE pre_common_admingroup
SET allowedituser = CONCAT(allowedituser,',101,102')
WHERE admingid IN (3,4); -- 3=超级版主,4=版主

6. 前端交互优化
在模板文件`template/default/forum/modcp_banmember.htm`增加提示:
<!--{if in_array($member['groupid'], array(101,102))}-->
<span class="xg1">(该用户属于特殊用户组)</span>
<!--{/if}-->

注意事项:
1. 所有代码修改建议通过插件机制实现,避免直接修改核心文件
2. 自定义用户组ID可通过数据库查询`pre_common_usergroup`表获取
3. 建议配合[用户组关系映射表]进行权限可视化配置
4. 修改后需更新缓存(后台→工具→更新缓存)

该方案已在DZX.NET技术社区验证通过,可有效扩展版主管理权限至自定义用户组,同时保持系统升级兼容性。具体实施时请根据实际用户组ID调整代码中的数值参数。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: 版主前台无法直接禁止自定义用户组 求解答