gpt4 book ai didi

php - 如何根据 MySQL 和 PHP 中的用户权限创建两个不同的 session

转载 作者:行者123 更新时间:2023-11-29 16:00:11 25 4
gpt4 key购买 nike

我想要有两个不同的 session - 管理员 session 和普通用户 session ,具体取决于他们的权限设置。我有下表:

---- LOGIN ----

Login ID | Username | Password | StaffID (FK)
-------------------------------------------------------
1 | bob.jones | *hashed password* | 1

---- ROLES ----

RoleID | Role | Privilege
---------------------------
1 | Worker | Normal
2 | CEO | Admin

---- JOBS ----

JobID | StaffID | PlaceID | RoleID
----------------------------------
1 | 1 | 1 | 1
2 | 2 | 1 | 2

我的登录过程中有以下片段。这是特权设置为 Enum 的地方。

...
else if ($pwdCheck == True){
session_start();
$query = mysqli_query($conn, 'SELECT staff.StaffID, role.Privilege FROM
jobs
INNER JOIN staff ON staff.StaffID = jobs.StaffID
INNER JOIN role ON role.RoleID = jobs.RoleID
WHERE login.Username = ?????????');

$gettier = mysqli_fetch_assoc($query);

if((int)$gettier["Privilege"] === 0){
$_SESSION['userID'] = $row['LoginID'];
header("Location: staffindex.php?login=USERsuccess");
}
elseif((int)$gettier["Privilege"] === 1){
$_SESSION['AdminID'] = $row['LoginID'];
header("Location: staffindex.php?login=ADMINsuccess");
}

exit();
}

感谢任何帮助,谢谢

最佳答案

正如您的评论中所指出的,您正在执行一个查询,该查询可能会为同时具有管理员和普通角色的人返回几行,用户所拥有的每个工作/角色各一行,但您只从结果中查询一行(并且您还错过了检查查询是否至少返回一行;如果用户不存在,当您对空查询结果执行mysqli_fetch_assoc($query)时,这将产生错误。

我还建议使用角色名称而不是任何 ID,因为 ID 可能会更改,而角色名称应保持不变。

代码:

  $isAdmin= FALSE;
$isUser= FALSE;

$query = mysqli_query($conn, 'SELECT staff.StaffID, role.Privilege FROM
jobs
INNER JOIN staff ON staff.StaffID = jobs.StaffID
INNER JOIN role ON role.RoleID = jobs.RoleID
WHERE login.Username = ?????????');


while ($gettier = mysqli_fetch_assoc($query)) {
if($gettier["Privilege"] === "Normal"){
$_SESSION['userID'] = $row['LoginID'];
$isUser= TRUE;
}
elseif($gettier["Privilege"] === "Admin"){
$_SESSION['AdminID'] = $row['LoginID'];
$isAdmin= TRUE;
}
}

// redirect the user based on the $isAdmin/$isUser flag
if ($isAdmin) {
header("Location: staffindex.php?login=ADMINsuccess");
} elseif ($isUser) {
header("Location: staffindex.php?login=USERsuccess");
} else {
// User not found.
}

关于php - 如何根据 MySQL 和 PHP 中的用户权限创建两个不同的 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56247033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com