我正在使用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"];
}
}
答案 0 :(得分:1)
解决方案不是使用die()
,而是渲染另一个版本的页面。
if (!CheckAuth(3)) {
// render error page
} else {
// render normal page
}
答案 1 :(得分:0)
你不应该问if (!CheckAuth(3))
如果用户有权查看内容,你应该更好地使用if (CheckAuth(3))
并显示页面数据,如果没有将其重定向到403页面此
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;
}