[英]Why does in_array() always return false (User Permissions)?
我想根据 SQL 数据库中的值设置用户权限。 我目前将用户权限存储在$_SESSION['Userpermissions']
数组中,但是当我 go 检查这些权限时, in_array
总是返回 false。
我已经尝试过使用isset
方法和array_search
方法。
这是登录名。php
function loginById($user_id)
{
global $conn;
$sql = "SELECT u.id, u.role_id, u.username, r.name as role FROM users u LEFT JOIN roles r ON u.role_id=r.id WHERE u.id=? LIMIT 1";
$user = getSingleRecord($sql, 'i', [$user_id]);
if (!empty($user)) {
// put logged in user into session array
$_SESSION['user'] = $user;
$_SESSION['success_msg'] = "You are now logged in";
// if user is admin, redirect to dashboard, otherwise to homepage
if (isAdmin($user_id)) {
$permissionsSql = "SELECT p.name as permission_name FROM permissions as p
JOIN permission_role as pr ON p.id=pr.permission_id
WHERE pr.role_id=?";
$userPermissions = getMultipleRecords($permissionsSql, "i", [$user['role_id']]);
$_SESSION['userPermissions'] = $userPermissions;
header('location: ' . BASE_URL . 'admin/dashboard.php');
} else {
header('location: ' . BASE_URL . 'index.php');
}
exit(0);
}
}
这里是 function 检查权限
function canDeletePost() {
if(in_array('delete-post', $_SESSION['userPermissions'])){
return true;
} else {
return false;
}
}
这是print_r
的 output :
Array
(
[0] => Array
(
[permission_name] => delete-user
)
[1] => Array
(
[permission_name] => create-user
)
)
这是我用来测试的代码
<?php if (canDeleteUser()){
echo "CAN DELETE USER";
}else{
echo "CANT DELETE USER";
}?>
结果始终是“无法删除用户”
您正在搜索$_SESSION['userPermissions']
中的值,但这些值是 arrays,而不是字符串。 相反,使用array_column
从 arrays 中获取权限值:
in_array('delete-post', array_column($_SESSION['userPermissions'], 'permission_name'))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.