【问题标题】:How to create two different sessions depending on user privilege in MySQL and PHP如何根据 MySQL 和 PHP 中的用户权限创建两个不同的会话
【发布时间】: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"] 将是NormalAdmin 所以(int)$gettier["Privilege"]始终为0。您需要比较$gettier["Privilege"] === 'Normal'
  • 或者他可以在查询中将role.Privilege 替换为role.RoleID 并检查$gettier["RoleID"] 而不是1\0, potato\potato

标签: php mysql sql session privileges


【解决方案1】:

正如您在评论中指出的那样,您正在执行一个查询,该查询可能会为具有管理员和普通角色的人返回几行,用户拥有的每个工作/角色一个,但您只从结果中查询一行(而且您还错过了检查查询是否返回至少一行;如果用户不存在,这将在您对空查询结果执行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.
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多