管理员无需访问管理员编辑页面即可编辑自己的个人资料

时间:2014-07-23 14:06:38

标签: php

在我的示例中,管理员可以具有级别1,2或3。

我有一个用户编辑页面,此页面只能由级别为1的管理员管理。

我试图允许用户查看自己的个人资料并编辑自己的个人资料  即使他们没有看到页面的许可(2级和3级的情况)。

在我尝试这样做的过程中,经过多次尝试,我“找到”了一种有效的方法。

但我不明白这是如何工作的。

你明白这是如何运作的吗?

在我的menu.php文件中,我有这个“我的个人资料”链接,每个用户都可以点击更新他的个人资料:

<a title="my profile" 
href="dashboard.php?exe=users/users-edit&userid=<?php echo $_SESSION['admin']['id']; ?>">

我还有一个用户索引文件,其中有我的用户列表,我有一个链接来编辑每个用户:

echo '<a 
href="dashboard.php?exe=users/users-edit&userid='.$result['id'].'">Edit user</a>';

当我点击我的链接时,我会转到我的编辑用户页面,在此页面中我将所有代码都提前:

<?php
if(function_exists('verifyLevel')){
    if(verifyLevel($_SESSION['admin']['id']) == '0'){   
        echo 'You dont have permissions to edit users.';
    }
    else{
        $userId = $_GET['userid'];
        $read = $pdo->prepare("SELECT * from admins WHERE id = ?");  
        $read->bindParam(1, $userId, PDO::PARAM_INT);
        $read->execute();
        $result = $read->fetch(PDO::FETCH_ASSOC);
        if(!$read->rowCount() >=1){
            header('Location: dashboard.php?exe=users/index');
    }
....
?>

它的工作方式与我想要的一样。

例如,如果管理员有2级并且他试图访问我的用户索引页面,他会得到“你没有权限编辑用户”。消息。

但如果这个2级管理员尝试访问“我的个人资料”链接,他有权访问此页面并编辑自己的个人资料。

但是你知道在我的情况下使用=='0来完成这项工作吗?

这是我验证级别的函数:

function verifyLevel($userId){      
    $pdo = start();
    $readUser = $pdo->prepare("SELECT * FROM admins where id = :userId");  
    $readUser->bindValue(":userId", $userId);  
    $readUser->execute();
    $result = $readUser->fetch(PDO::FETCH_ASSOC);
    return $result['level'];    
}

1 个答案:

答案 0 :(得分:1)

您当前的机制看起来运气不好,这当然不是安全检查的好方法。

完全按照你的想法做检查。所以,作为一个人,我会定义这样的条件:

Allow access if level is 1 OR if profile to be edited is his own.

然后尝试做代码。像这样......

if(verifyLevel($_SESSION['admin']['id']) == 1 || 
   $_SESSION['admin']['id'] == $_GET['userid']) {   
    // Do the editing stuff
} else {
    echo 'You dont have permissions to edit users.';
}