【问题标题】:Setting user privileges in PHP and MYSQL在 PHP 和 MYSQL 中设置用户权限
【发布时间】:2013-02-06 23:01:46
【问题描述】:

我想让某些用户可以访问我的一些 php 页面。我在“user_privilege”属性中将用户表中的这些用户标记为“super_user”。太胖了,我的登录和会话工作正常。但我不确定“super_user”只有页面。基本上这是我想让超级用户可以访问的页面:

<?php
require_once('../includes/su_permission.inc.php');
require_once('../includes/session_timeout_db.inc.php');
?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Secret page</title>
</head>

<body>
<h1>Restricted area</h1>
<p><a href="menu_db.php">Back to restricted menu</a> </p>
<?php include('../includes/logout_db.inc.php'); ?>
</body>
</html>

session_timeout_db.inc.php 文档检查用户的会话是否已过期并且工作正常。我还添加了这个:require_once('../includes/su_permission.inc.php');在代码中检查用户是否是超级用户。这是我对代码的尝试:

<?php
require_once 'login.php';
$conn = new mysqli ($host, $user, $password, $database) or die("Connection Failed");

$sql = 'SELECT user_role FROM users WHERE user_email = ?';

$stmt = $conn->stmt_init();
$stmt->prepare($sql);

$stmt->bind_param('s', $user_email);

$stmt->bind_result($user_role);
$stmt->execute();
$stmt->fetch();

if ($user_role='SU') {
  $_SESSION['privilege_level'] = $user_role;

// some other code needed here
  exit;
} else {
  echo 'No permission to visit this page';
}

我知道这是一个糟糕的尝试,但我不确定从这里还能做什么。有人可以建议我能做到这一点的最佳方法吗?

谢谢

【问题讨论】:

  • 那么你得到了什么特定的错误(如果有的话)?您是否进行过任何调试以确定您的代码可能在哪里出现问题?您是否真的打算在用户成功通过身份验证后调用exit?这将停止输出页面的其余部分。
  • @MikeBrant 我删除了退出部分并运行了代码,它仍然可以访问数据库中未标记为超级用户的用户。就是不知道我用的方法对不对

标签: php mysql session privileges


【解决方案1】:

这是你的问题:

if ($user_role='SU') {

您需要一个适当的比较运算符(=====)。您现在所做的是在所有情况下都将 SU 的值分配给 $user_role

避免此类问题的一个轻微编程建议是翻转到这样的比较顺序:

if ('SU' == $user_role) {

这样,如果您不小心输入了 = 而不是 =====,您将收到错误输出,而不是让您的代码在执行您不希望它执行的操作时安静地运行。

【讨论】:

  • 好的,谢谢,我将其更改为 == 现在它说没有查看此页面的权限,但它实际上查看了我在页面上的内容。我只是希望它显示无权限错误而不显示其他任何内容。
  • @elmify 这就是exit 派上用场的地方:)
  • 啊,我明白了,感谢您对我的耐心,但我在这里添加了退出:$_SESSION['privilege_level'] = $user_role;退出;
  • (续)仍然没有变化,我不确定是否应该添加类似 $_SESSION['privilege_level'] = $user_role;在受限页面中
  • 您可能希望在不希望页面显示的条件一侧添加exit,而只是添加“无权限”消息。所以把它放在那条消息之后。
【解决方案2】:

我在我正在开发的网站上做了类似的事情。我为不同的用户“类型”设置了三个不同的区域。

然后我为页面组设置 3 个不同的会话检查文件。我确信这可以只使用一个文件和一些 elseifs 来完成,但无论如何。无论如何,这里是我在页面上使用的代码 sn-p 来检查用户是否已登录,以及他们是否是查看页面的正确“类型”用户:

if (isset($_SESSION['authenticated']) && $_SESSION['authenticated'] !== 'admin') {

//if (!isset($_SESSION['authenticated'])) {
  header("Location: $redirect");
  exit;

如果它们不正确,它会重定向它们。我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2016-07-20
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 2016-01-19
    • 2015-08-01
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多