PHP设置多用户组访问权限时IF判断group 14失效怎么解决
问题排查方案
核心原因
问题本质是权限校验时的输入值不规范,7、8可以正常匹配唯独14失败,大多是因为$_SESSION['userrole']中存储的14存在不可见字符、格式异常或者类型不匹配导致的。
排查步骤
- 第一步先加调试代码确认
$_SESSION['userrole']的实际值和类型,在权限判断前插入以下代码:
var_dump($_SESSION['userrole']); exit;
查看输出结果:
- 如果值带前后空格、换行等不可见字符,就会导致匹配失败
- 如果是全角数字
14,会被识别为非数字内容,无法匹配14的规则 - 如果类型和判断时用的类型不一致(比如数组存字符串、session存整型,极端场景下也可能出现匹配异常)
- 第二步排查session赋值逻辑,确认用户组为14的用户登录时,是否正确把14赋值到了
$_SESSION['userrole'],有没有逻辑判断错误把14改成了其他值。
修复方案
统一对输入的用户角色值做标准化处理,避免格式、类型、空白的影响,参考代码如下:
// 先对用户角色值做去空白+转整型的标准化处理,??0是兼容不存在该session键的场景 $userRole = (int)trim($_SESSION['userrole'] ?? 0); // 权限校验用整型数组匹配,逻辑更清晰 $allowRoles = [7, 8, 14]; if (in_array($userRole, $allowRoles)) { // 允许访问的业务逻辑 } else { echo "access denied"; }
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

