0

我正在使用 PHP 开发一个门户,并且需要实现一个简单的 PHP 身份验证系统,该系统根据用户的凭据限制对某些页面的访问。

我有一个函数 CheckAuth() 需要一个参数(整数)。即,我的数据库有五个授权级别 1-5。如果我调用 CheckAuth(3) 如果用户的授权级别为 3 或更高,这将返回 true。我现在的代码如下:

if(!CheckAuth(3) {
    die("Sorry, we were unable to deliver the requested content.");
}

这个解决方案的问题是它会破坏页面的布局,因为不会显示页面的页脚等其他元素。

有条件地仅显示页面的一部分的最佳方式是什么?

提前致谢!达里奥

function CheckAuth() {

require("config.php");

//User ain't been logged in?    
if(!isset($_SESSION["login"])) {

    return 0;
}

//Alright user is logged in, lets check the level...
//1 = User, 2 = OP (or Admin)

$query = "SELECT * FROM delegations WHERE id=" . $_SESSION["login"];
$results = mysqli_query($con, $query);

while($row = mysqli_fetch_array($results)) {

        return $row["Level"];

}
}
4

2 回答 2

1

解决方案不是使用die()而是渲染另一个版本的页面。

if (!CheckAuth(3)) {
    // render error page
} else {
    // render normal page
}
于 2013-07-24T17:05:17.603 回答
0

如果用户有权查看内容,你不应该要求if (!CheckAuth(3))你最好去显示页面数据,如果没有将他重定向到类似这样的 403 页面if (CheckAuth(3))

    if(CheckAuth(3))
    {
       //display page content
    }

    function CheckAuth($permissionLevel)
    {
    require("config.php");

    //User ain't been logged in?    
    if(!isset($_SESSION["login"])) {

      return 0;
    }

    //Alright user is logged in, lets check the level...
    //1 = User, 2 = OP (or Admin)

    $query = "SELECT * FROM delegations WHERE id=" . $_SESSION["login"];
    $results = mysqli_query($con, $query);

    while($row = mysqli_fetch_array($results)) {

      if($row["Level"] == $permissionLevel)
      {
        return true;
      }

    }
    header("Status: 403 Forbidden");
    header("Location: /403.html");
    exit;
  }
于 2013-10-09T12:09:54.767 回答