无法在php中为用户管理应用程序创建正确的会话

时间:2017-04-28 04:59:49

标签: php

我已经在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

工作正常,但我遇到了以下问题。

  1. 超级管理员有权使用 Create_user.php 文件创建用户,而USER 测试有权访问 download_file.php
  2. 用户测试登录 download_file.php 文件时,他可以执行该文件中提到的所有任务,但是如果测试用户输入 Create_user。在URL中的php 然后他能够毫无问题地查看属于Super Admin的文件。

    所以我在这里很困惑如何在1个用户没有权限/权限打开特定文件时停止此过程,应该将用户定向到主页或任何错误。

2 个答案:

答案 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>