【问题标题】:Checking user role for navigation with session quitting使用会话退出检查用户角色以进行导航
【发布时间】:2016-05-02 09:49:59
【问题描述】:

我试图阻止用户访问管理员和用户管理员使用的页面。现在,用户可以通过操作 URL 导航到每个页面。

用户的角色在数据库中由一个介于 1-3 之间的数字确定,其中 1 代表 Admin,2 代表 user-admin,3 代表用户。

我正在寻找一种解决方案,在该解决方案中,用户想要导航的页面会检查登录用户的角色。如果导航页面适用于管理员,则用户必须具有角色编号 1。如果用户无权访问该页面,我希望他们的会话结束并被发送回登录页面。登录.php

我尝试了一些解决方案,例如放置

$_SESSION['role'] = $role;
{
//check if user if signed in
if($_SESSION['1'] == false)
  {
    echo 'Error. You do not have access';
  }
}
die();

在每一页。现在我没有收到该代码的任何错误。但它也不起作用:/

感谢任何帮助!

【问题讨论】:

  • 您必须在每个页面中开始会话。你在每一页都使用这个代码start_session()吗?

标签: php session privileges


【解决方案1】:
<?php
//You can save user role in session like:
define('ADMIN_ACCESS', 1);
define('USER_ADMIN_ACCESS', 2);
define('USER_ACCESS', 3);

$_SESSION['role'] = ADMIN_ACCESS; // Admin (Any one of three)
$_SESSION['role'] = USER_ADMIN_ACCESS; // User Admin (Any one of three)
$_SESSION['role'] = USER_ACCESS; // User (Any one of three)

//On every page, add a variable which user role can access this page.

$requiredRole = ADMIN_ACCESS;

//Write a custom function to check user role.

function isAuthorized($requiredRole = NULL) {
 if (session_id() == '') {
  return FALSE;
 }
 if (isset($_SESSION['role'])) {
  if ($_SESSION['role'] == ADMIN_ACCESS) {
   return TRUE; // Administrator has access to every page/functionality.
  }
  if ($requiredRole < $_SESSION['role']) {
   return FALSE;
  }
}
return FALSE;
}

//And now, check if user can access the page or not by calling the function.
//On every page, add a variable which user role can access this page.

$requiredRole = ADMIN_ACCESS;
if (! isAuthorized($requiredRole)) {
 // Redirect user as he is not autorized.
}
?>

【讨论】:

  • 哇,感谢您的快速回答!我一定会尝试这个解决方案。我会检查它是否有效,然后回来给你绿色检查! :D
  • 对不起。我是个笨蛋:P 我添加了这些“define('ADMIN_ACCESS', 1); define('USER_ADMIN_ACCESS', 2); define('USER_ACCESS', 3); $_SESSION['role'] = ADMIN_ACCESS; / / Admin(三选一) $_SESSION['role'] = USER_ADMIN_ACCESS; // 用户管理员(三选一) $_SESSION['role'] = USER_ACCESS; // 用户(三选一)“在我的模板和我的 admin.php 文件中的其余部分。但我仍然可以作为普通用户在那里导航。
  • 请正确研究代码,并在需要时添加断点/回声。你会解决问题的。
  • 嘿。你能再解释一下吗?我尝试使用“$_SESSION['role']”示例创建一个带有定义和单独 php 文件的 session.php,然后将其包含在我想要正确访问的页面中。然后我将所需的角色、功能和重定向添加到所有页面。但我仍然可以使用普通用户访问管理页面。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-20
  • 1970-01-01
  • 1970-01-01
  • 2011-11-05
  • 2022-10-16
相关资源
最近更新 更多