允许特定用户有权访问php / mysql中的特定管理页面

问题描述

我有一个(admin_users),如下所示,其中有5个用户的列表。表格中的所有这5个用户都可以访问每个管理页面。总共有5 admin pages5 admin users

让我们假设5 admin pages名称为:admin1.PHPadmin2.PHPadmin3.PHPadmin4.PHPadmin5.PHP

admin_users

ID  user_name  user_pass open 
1   John        sxhsds   false
2   Nicholas    eruerie  false 
3   James       zsdfdf   false 
4   Richard     adsdsf   false
5   Robert      rfgjrg   false

以下PHP代码允许用户登录

if (isset($_POST['user_name'],$_POST['user_pass']) && $_POST['user_login'] == 1) {

    $username = $_POST['user_name'];
    $password = $_POST['user_pass'];

    $stmt = $connect->prepare("SELECT user_pass FROM admin_users WHERE user_name=?");
    $stmt->bind_param('s',$username);
    $stmt->execute();
    $result = $stmt->get_result();
    $user_from_db = $result->fetch_object();

    if ($user_from_db && password_verify($password,$user_from_db->user_pass)) {
        $_SESSION['webpageadmin'] = true;
        $_SESSION['webpageadmin_user'] = $_POST['user_name'];
    } else {
        echo "Invalid username and password.";  
    }
} 

我想要实现的是我希望特定的用户有权访问特定的管理页面。例如:

admin1.PHP John and Nicholas
admin2.PHP James and Richard
admin3.PHP all users
admin4.PHP Robert,Nicholas,James and John
admin5.PHP Robert

我尝试过的事情:

我正在考虑在admin_users表中再添加一列(admin_pages),如下所示:

ID  user_name  user_pass  open         admin_pages
1   John        sxhsds   false   admin1.PHP,admin3,admin4.PHP
2   Nicholas    eruerie  false   admin1.PHP,admin3.PHP,admin4.PHP
3   James       zsdfdf   false   admin2.PHP,admin4.PHP
4   Richard     adsdsf   false   admin2.PHP,admin3.PHP
5   Robert      rfgjrg   false   admin3.PHP,admin4.PHP,admin5.PHP

我想知道我需要在上面的PHP代码中进行哪些更改,以便它在上面的admin_pages表中查找用户(尝试登录)及其admin_users

解决方法

选项1:我认为,如果您可以允许自己容纳更多的桌子,那么最干净,最简单 添加一张权利表:

ID  access
1   God-like        
3   Admin1
4   Admin2     
5   Admin3      

然后,您可以在用户表中添加一列,并对访问ID进行字符串化,然后在登录时将其拆分为一个数组。

ID  user_name  user_pass  open   access
1   John        sxhsds   false   1,2,3
2   Nicholas    eruerie  false   3,5
3   James       zsdfdf   false   1,4,5
4   Richard     adsdsf   false   3,5
5   Robert      rfgjrg   false   1,5

或使用其他表格

UserId  access_id
1       1
1       2
1       3

PHP方面,登录时,您将访问ID存储在会话/ cookie中。 在每个需要特定访问权限的页面上,如果用户具有所需的访问权限,则只需签入会话/ cookie。

选项2:如果您只能负担一栏并要添加页面名称。 您仍然必须存储用户登录时可以访问的页面(会话/ cookie)

To get the current page : basename($_SERVER['PHP_SELF']); 

您必须使页面面对已存储的页面名称。祝您项目顺利;)