在我的示例中,管理员可以具有级别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'];
}
答案 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.';
}