我已经在PHP中创建了一个用户管理应用程序,其中Super Admin拥有授予和撤销用户权限的权限/权限。
我为包括超级管理员在内的所有用户创建了会话。
以下代码:
$_SESSION['User_login'] = $single_value['user_name'];//USER NAME
$_SESSION['permission'] = $single_value['permission']; // Granted permissions
$_SESSION['role_code'] = $single_value['role_id'];// ROLE CODE
工作正常,但我遇到了以下问题。
当用户测试登录 download_file.php 文件时,他可以执行该文件中提到的所有任务,但是如果测试用户输入 Create_user。在URL中的php 然后他能够毫无问题地查看属于Super Admin的文件。
所以我在这里很困惑如何在1个用户没有权限/权限打开特定文件时停止此过程,应该将用户定向到主页或任何错误。
答案 0 :(得分:0)
您需要在Create_user.php
文件的开头部分进行某种条件检查,以检查请求该页面的用户具有哪些权限。像这样:
if ($_SESSION['permission'] != 'Admin') { // or however you name your permissions
header('Location: /download_file.php'); // redirect non-admin users
}
// ... admin stuff follows
答案 1 :(得分:0)
这可以通过in_array()函数来实现。
使用页面名称为所有菜单创建一个sperate表,并使用给定/已授予登录用户的权限检查当前呈现的页面。
菜单表: AMD and module
下面是检查权限的代码。
<强> CHECK.PHP 强>
function check($filename)
{
include_once('config.php');
$sql = "SELECT name from menu where page_name = '".$filename."' ";
#echo $sql;
$result = $conn->query($sql);
if($result->num_rows > 0 )
{
while($row = $result->fetch_assoc())
{
if(!in_array($row['name'],explode(",",$_SESSION['permission'])))
{
header('location:logout.php');
}
#echo "data = ".$row['name']; echo "<br> My permission = ".$_SESSION['permission'];
}//EOF WHILE
}//EOF IF
else
{
echo "0 result";
}
}//EOF CHECK();
在您要检查权限的地方调用此函数
<强> Create_user.php 强>
<?php include_once 'check.php';
check(basename($_SERVER['PHP_SELF'])); #passing the name of current file.
?>
<!DOCTYPE html>
<!-- Rest of the code -->
<html>