【发布时间】:2019-10-08 08:44:36
【问题描述】:
我希望有两个不同的会话 - 管理员会话和普通用户会话,具体取决于他们的权限设置。我有以下表格:
---- 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
我的登录过程中有以下 sn-p。这是将权限设置为枚举的地方。
...
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();
}
任何帮助表示赞赏, 谢谢
【问题讨论】:
-
你需要告诉我们上面的代码有什么问题。 Privilege 是 Normal 或 Admin,您检查它是 0 还是 1
-
权限是管理员,其中 Normal == 0 和 Admin == 1。当我尝试运行此 sn-p 时,所有用户都重定向为 USERsuccess。
-
$gettier["Privilege"]将是 Normal 或 Admin 而不是 1\0,如果你想要 1\0 你需要使用RoleID -
正如@tim 所说,
$gettier["Privilege"]将是Normal或Admin所以(int)$gettier["Privilege"]将始终为0。您需要比较$gettier["Privilege"] === 'Normal'。 -
或者他可以在查询中将
role.Privilege替换为role.RoleID并检查$gettier["RoleID"]而不是1\0, potato\potato
标签: php mysql sql session privileges