停止用户访问php中的Admin面板

时间:2016-08-30 06:07:09

标签: php

我正在尝试为普通用户和AdminUser创建登录系统。如果普通用户在浏览器http://localhost/project中键入,则会显示登录屏幕,用户可以使用其ID和密码登录。但是,如果用户在浏览器http://localhost/project/admin中键入,则登录时,普通用户也会在adminpanel中获取我想要停止的访问权限。我怎么能这样做?我被困在这里很久了。请帮忙吗?

登录用户:

$query = "SELECT * FROM user WHERE eid='$eid'and password='$password'";
$result = $db->select($query);
if ($result != false) {
 $value = $result->fetch_assoc();
 Session::set("login", "userLogin");
 Session::set("username", $value['username']);
 Session::set("email", $value['email']);
 Session::set("uid", $value['uid']);
 Session::set("image", $value['image']);
header("Location: index.php");
} else { $loginErr = "Username
or Password Not Matched !!";}

用户的会话功能:

public static function checkSession(){
 self::init();
 if (self::get("userLogin")!== false) {
 self::destroy();
 header("Location:login.php");
 }
}

用户的会话检查:

 Session::checkSession();

登录管理员

$query = "SELECT * FROM afcadmin WHERE adminname='$adminname'and password='$password'";
$result = $db->select($query);
if ($result != false) {
  $value = $result->fetchassoc();
  Session::set("loginadmin", "adminLogin");
  Session::set("adminname", $value['adminname']);
  Session::set("adminemail", $value['adminemail']);
  Session::set("adminid", $value['adminid']);
  header("Location: index.php");
  } else { 
      $loginErr = "Usernameor Password Not Matched !!";
      }

管理员的会话功能:

  public static function checkSessionAdmin(){
   self::init();
   if (self::get("adminLogin")!== false) {
   self::destroy();
   header("Location:login.php");
    }
   }

管理员的会话检查

 Session::checkSessionAdmin();

4 个答案:

答案 0 :(得分:0)

您不必为用户和管理员登录使用不同的表。您只需要一个可帮助您检查用户是否具有管理员权限的列。例如:您可以创建一个is_admin列,如果用户是管理员,则将其值设置为1,如果他/她不是,则将其设置为0.

# Your query
$stmt = "SELECT
users.id as uid,
users.username as username,
users.is_admin as is_admin
FROM users
WHERE users.username='{$username}'
AND users.password='{$password}'
LIMIT 1
";

然后将结果添加到会话中,就像您已经做的那样。

var_dump($_SESSION['user']);

Array {
    'uid' => '125',
    'username' => 'SomeGuy',
    'is_admin' => '1',
}

您的会话现在将包含值is_admin,因此您可以使用简单的if语句检查用户是否为管理员。

if ($_SESSION['user']['is_admin'] == 1) {
    // Admin only stuff here
}

答案 1 :(得分:0)

我可以看到你有两个单独的表供用户和管理员存储他们的数据,所以我认为这不应该是你的查询的任何问题,当它为用户我们不能停下来给他们任何页面。

但是,如果用户可以使用自己的详细信息登录管理面板,这意味着您在两个表中都有多个数据,这可能是因为您可能在两个表中插入相同的数据或者插入中的内容有问题

但作为一种解决方案,我认为最好在两个数据库中添加Roles字段,用于定义其用户或管理员的位置,以及在您的选择查询之后,如果条件检查它们是否符合您的要求而不是设置会话。< / p>

但是从我的角度来看,最好的办法是让用户和管理员使用单个表来存储所有评论数据,并使Admin表存储user_id和一些优先级。当你检查查询时检查user_id是否属于admin表,并将它们定义为admin或user,而不是设置session。

这可能会解决您的问题,但如果需要更多帮助,请与我联系。

答案 2 :(得分:0)

您可以在数据库中使用user_type字段,在admin会话中,您可以看到user_type是admin还是customer。如果它的管理员然后将他重定向到管理仪表板,否则重定向到客户仪表板。在管理标题中,检查相同的内容。

希望这有帮助。

答案 3 :(得分:0)

我找到了解决方案。我替换了以下代码。

用户登录代码:

Replaced Session::set("login", "userLogin"); by Session::set("login", "true");

会话功能用户代码:

Replaced if (self::get("login")!== false) by if (self::get("login")== false) 

管理员登录代码:

Replaced Session::Session::set("loginadmin", "adminLogin"); by Session::set("adminlogin", "true");

会话功能管理员代码:

Replaced if (self::get("adminlogin")!== false) by if (self::get("adminlogin")== false)