寻找关于我当前设置的一些建议,以及是否有更好的方法(这是我第一次尝试构建这样的应用程序)但我正处于需要用户角色的位置,只有两个用户和管理员。
我有一个用户表和一个组表,还有一个连接表,它从用户表中获取ID,从组表中获取Id,我也可以分配用户所属的组。
我想设法做一些事情,防止用户'通过输入url /admin/index.php访问管理区域,如果他们是管理员,也会在索引页面上显示一个链接,如果他们是普通用户则不会看到它。
这是我的代码,用于演示我可以显示用户角色标题但在这一点上挣扎:
<?
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();
}
?>
我想知道我的做法是否完全错误?
更新
{{1}}
我收到了这个错误:
注意:未定义的变量:第12行的/ Applications / MAMP / htdocs / dashboardr v3.2.3 / admin / header.php中的组
警告:在第12行的/ Applications / MAMP / htdocs / dashboardr v3.2.3 / admin / header.php中为foreach()提供的参数无效
答案 0 :(得分:1)
我想设法做一些事情,防止用户&#39;通过输入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之前,您都希望将其放在页面顶部。