Wie kann ich Benutzer - /Zugriffsebenen zu meinem aktuellen login-Skript?
Ich bin derzeit lernen, PHP und MySQL und ich habe die Arbeit von einem einfachen (wenn auch alten) login-Skript, tutorial - ive kommen über verschiedene abgeschrieben Funktionen und solche und ich bin versucht zu verbessern, auf dieses Skript.
Möchte ich hinzufügen, unterschiedliche Zugriffsebenen auf mein Skript wie admins und Benutzer. Ich habe eine Zeile in meiner Tabelle 'users' genannt "Zugriff", wobei der Zugang wird " 1 "für Benutzer und" 9 " für die admins.
Nachdem einige anfängliche Forschung, es scheint ich muss in der Lage sein, zum speichern der Benutzer-Zugriffsebene in eine session-variable, ist das der richtige Weg, um darüber zu gehen? Wenn ja, wie würde ich diese abrufen, zunächst, wenn der Benutzer sich anmeldet?
Einmal die access-Ebene ist in der session gespeicherten variable, wie kann ich dann in der Lage sein, beschränken Sie den Zugriff auf Seiten - header-redirects vielleicht?
Dies ist der aktuelle code, mit dem ich arbeite aus functions.php
function checkLogin()
{
/* Check if user has been remembered */
if(isset($_COOKIE['cookname']) && isset($_COOKIE['cookpass'])){
$_SESSION['username'] = $_COOKIE['cookname'];
$_SESSION['password'] = $_COOKIE['cookpass'];
}
/* Username and password have been set */
if(isset($_SESSION['username']) && isset($_SESSION['password']))
{
/* Confirm that username and password are valid */
if(confirmUser($_SESSION['username'], $_SESSION['password']) != 0)
{
/* Variables are incorrect, user not logged in */
unset($_SESSION['username']);
unset($_SESSION['password']);
return false;
}
return true;
}
/* User not logged in */
else
{
return false;
}
}
Und aus login.php
if(isset($_POST['sublogin'])){
/* Check that all fields were typed in */
if(!$_POST['user'] || !$_POST['pass']){
$errors .= "You didn't fill in a required field.<br/>\n";
}
else{
/* Once all fields are entered - perform form validation */
/* Checks that username is in database and password is correct */
$md5pass = md5($_POST['pass']);
$result = confirmUser($_POST['user'], $md5pass);
/* Check error codes */
if($result == 1){
$user_errors .= "That username doesn't exist in our database.<br/>\n";
}
else if($result == 2){
$pass_errors .= "Incorrect password, please try again.<br/>\n";
}
/* Username and password correct, register session variables */
if (empty($errors) && empty($user_errors) && empty($pass_errors)){
$_POST['user'] = mysql_real_escape_string($_POST['user']);
$_SESSION['username'] = $_POST['user'];
$_SESSION['password'] = $md5pass;
/* Quick self-redirect to avoid resending data on refresh */
echo "<META HTTP-EQUIV='refresh' CONTENT='0;URL=index.php'>";
}
/**
* This is the cool part: the user has requested that we remember that
* and one to hold his md5 encrypted password. We set them both to
* he's logged in, so we set two cookies. One to hold his username,
* expire in 100 days. Now, next time he comes to our site, we will
* log him in automatically.
*/
if(isset($_POST['remember'])){
setcookie("cookname", $_SESSION['username'], time()+60*60*24*100, "/");
setcookie("cookpass", $_SESSION['password'], time()+60*60*24*100, "/");
}
//return;
}
}
Jede Hilfe wäre sehr geschätzt, wie ich bin stecken geblieben auf diese für ein paar Tage jetzt, danke.
- Jedoch NICHT round-trip-kritische Informationen wie usersnames und Passwörter durch ein cookie. Sehr sehr schlechtes design. Dann nicht blind zu akzeptieren, diese cookie-Werte und stellen Sie Sie in die Sitzung. Noch schlimmer design.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Also diese ex setzt Voraus, dass Sie die überprüfung der Begrenzung von Ressourcen zu Rollen in PHP nicht aus der DB. Dies kann leicht geändert werden, aber ich dachte, ich würde machen diese ex ein wenig einfach.
Schema:
Konto-Erstellung
nicht mit md5, es ist einfach zu implementieren und leicht zu überwinden. sha ist nur ein kleines, mehr sicher keine zusätzliche Arbeit.
Konto Login
Dies ist verkürzt, warf ich die Abfrage in, aber nicht alot von der DB-Logik, schreiben Sie es als notwendig, die Kommentare zu Lesen.
Check user ' s Rolle
Weisen unterschiedliche Rolle-ids für verschiedene Arten von Benutzern in der user-Tabelle.
Eine Kontext-Tabelle gespeichert wird, info von verschiedenen Datei-Pfade (vorzugsweise in der obersten Ebene des gewünschten Hierarchie im Ordner).
Und eine Tabelle, die die Zuordnung zwischen Rollen und andere Datei-Pfade (d.h. welche Art von Benutzer zugreifen darf, welchen Weg)
Jetzt an der Spitze der eingeschränkten Dateien, haben eine util-Methode, die in __FILE__ den Pfad und den Rollen-id und wird zeigen, ob der Benutzer Zugriff haben oder nicht und so nehmen Sie die entsprechende Maßnahme. So brauchen Sie nur zu speichern, Rollen-id in der session-variable.