寻找一些建议对我目前的设置,如果有一个更好的方法(这是我第一次尝试建立这样的应用程序),但我在一个点,我需要用户角色,只有两个所以用户和管理员。
我有一个用户表和一个组表,还有一个连接表,它从用户表和组表中获取ID,我可以分配用户所属的组。
我想设置一种方法来做一些事情,防止"用户"通过输入url/admin/index.php访问管理区域,并在索引页上显示一个链接,如果他们是一个管理员,而不是看到它,如果他们是一个正常的用户。
下面是我的代码,用来演示我可以显示用户的角色标题,但在这一点上很困难:
<?php
$user = $_SESSION['user'];
try{
$results = $dbh->query("SELECT *
FROM groups
INNER JOIN user_group_link_table
ON groups.id = user_group_link_table.group_id
WHERE user_group_link_table.user_id = $user");
}catch(Exception $e) {
echo $e->getMessage();
die();
}
$group = $results->fetchAll(PDO::FETCH_ASSOC);
foreach($group as $groups){
echo
$groups["name"]
// show a link to admins that user do not see?
;}
?>
我想知道我的方法是否完全错误?
<?
include('session.php');
if (!isset($_SESSION['user'])) {
header("Location: index.php");
}
if(!ini_get('date.timezone'))
{
date_default_timezone_set('GMT');
}
// This could be an include file for all admin pages
$isAdmin = false;
foreach($group as $groups){
if($groups['name'] === 'admin'){
$isAdmin = true;
break;
}
}
if(!$isAdmin){
header('Location: index.php'); // or some other arbitrary location
die();
}
?>
我得到这个错误:
注意:第12行/Applications/MAMP/htdocs/dashboardr v3.2.3/admin/header.php中未定义变量:group
警告:第12行/Applications/MAMP/htdocs/dashboardr v3.2.3/admin/header.php中foreach()的参数无效
我想设置一种方法来做一些事情,防止"用户"通过输入url/admin/index.php访问管理区域,并在索引页上显示一个链接,如果他们是一个管理员,而不是看到它,如果他们是一个正常的用户。
我会给你一个解决方案,将工作在你目前的设置;这不是的方法,但我现在会把工作做完的。如果您担心用户处于特定的角色中,您最好在查询中指定该角色,而不是遍历所有潜在的角色。
// This could be an include file for all admin pages
$isAdmin = false;
foreach($group as $groups){
if($groups['name'] === 'admin'){
$isAdmin = true;
break;
}
}
if(!$isAdmin){
header('Location: index.php'); // or some other arbitrary location
die;
}
你会想把它放在页面的顶部,在你吐出任何HTML之前。