我尝试使用权限创建登录系统。 我想知道如何检查用户的级别,如果它是管理员,技术员等...我已经与用户进行了简单的登录。
这是我的index.php(表格)
<html>
<head>
<title>Log-In</title>
<meta charset="UTF-8">
<meta name="author" content="Augusto Mendes">
<meta name="description" content="All">
<link rel="stylesheet" href="styles.css">
</head>
<body id="Both">
<form id="login" name="form" method="POST" action="/site/base/login_config.php">
<div class="form">
<label>Username</label>
<input type="text" name="username">
</div>
<div class="form">
<label>Password</label>
<input type="password" name="password">
</div>
<div class="form">
<input type="submit" value="Submit">
</div>
</form>
</body>
这是我的login_config.php(登录验证)
<?php
//Gets the Form's Variavels
$user = $_POST["username"];
$pass = $_POST["password"];
//Import "config.php"
include("config.php");
//Check the Data on the Database
$sql = "SELECT * FROM users WHERE User = '$user' AND Password = '$pass'";
$result = mysqli_query($connect, $sql);
$nreg = mysqli_num_rows($result);
if($nreg > 0){ //Check if any of the registries exist - If user exists
$reg = mysqli_fetch_array($result);
session_start();
$_SESSION["User"] = $reg["User"];
echo "Welcome ".$_SESSION['User'];
//header('Location:../index.php');
//I want this to redirect for User or Admin pages with their permissions
}
else{
//header('Location:../wrong.html');
}
?>
这是我的config.php(连接和数据库)
<?php
// Server COSNTs (Server, User, PW, DB)
define('SERVER', 'localhost');
define('USERNAME', 'root');
define('PASSWORD', '');
define('DATABASE', 'loja');
$connect = mysqli_connect(SERVER, USERNAME, PASSWORD);
// Connection to the MySQL Server
if (!$connect){
echo " Error: Connection to the Server FAILED! ";
echo "<script type='text/javascript'>alert(' Error: Connection to the Server FAILED! ')</script>";
exit;
}
$choose = mysqli_select_db($connect, DATABASE);
// Connection to the Database
if (!$choose){
echo " Error: Connection to the Database FAILED! ";
echo "<script type='text/javascript'>alert(' Connection to the Database FAILED! ')</script>";
exit;
}
?>
0:Windows技术员 1:Apple技术员 2:商店经理 3:管理员 4:现在N / D
由于我有2个文件夹,一个用户(0,1,2)和admin(3),我想只为每个用户提供权限。管理员可以访问用户&#39;数据但不是他们的文件夹和用户无法访问管理员。
感谢阅读。 -Ryan
答案 0 :(得分:0)
注意:为了解相关问题,我将回答这个问题,但请注意,此代码可能会受到严重的安全攻击,例如{{3} },SQL injection ...
我完全建议不要在生产环境中使用任何这些
安全性是一个棘手的话题,我建议使用一些库或框架进行登录,并确保其配置正确并且(合理)安全
回答:您基本上必须检查行“角色”中的值,并确定将其发送到何处。您还可以将整个用户信息存储在会话中而不仅仅是用户名中,这样您就可以检查每个页面上的权限
const ADMIN_ROLE = 4;
if($nreg > 0){ //Check if any of the registries exist - If user exists
$reg = mysqli_fetch_array($result);
session_start();
// Store the whole user information
$_SESSION['LoggedUser'] = $reg;
// Note: as you redirect after with the header location the user won't really see this message
echo "Welcome ".$_SESSION['LoggedUser']['User'];
// Set a default page for normal users
$page = '../index.php';
// Check against the admin role and overwrite
if ($_SESSION['LoggedUser']['Role'] == ADMIN_ROLE) {
$page = '../admin/index.php';
}
header("Location: $page");
}
回答评论 您可以使用常量
创建一个类class Role
{
const WINDOWS = 0;
const APPLE = 1;
const MANAGER = 2;
const ADMIN = 3;
}
现在,您可以在需要时使用此文件
// It's better to use some autoloading, look at "composer"
include "./Role.php";
session_start();
//... do checks
if (!$_SESSION['LoggedUser']['Role'] != Role::ADMIN) {
// redirect
}
我不太喜欢公共常量,我认为将这个逻辑封装在类中是一种更好的做法,因此可以从外部隐藏常量。我不打算扩展它,但你最终会得到像
这样的东西if (!$user->getRole()->isAdmin()) {
// redirect
}