2016-05-02 6 views
0

Ich versuche zu verhindern, dass Benutzer Zugriff auf Seiten erhalten, die vom Administrator und vom Benutzeradministrator verwendet werden. Im Moment kann der Benutzer zu jeder Seite navigieren, indem er die URL manipuliert.Überprüfen der Benutzerrolle für die Navigation mit Beenden der Sitzung

Die Rollen des Benutzers werden in der Datenbank mit einer Nummer zwischen 1-3 bestimmt, wobei 1 für den Admin steht, 2 für den Benutzer admin und 3 für den Benutzer.

Ich suche eine Lösung, bei der die Seite, auf der der Benutzer navigieren möchte, die Rolle der angemeldeten Benutzer überprüft. Wenn die navigierte Seite für den Administrator vorgesehen ist, muss der Benutzer die Rollennummer 1 haben. Wenn der Benutzer keine Rechte an der Seite hat, möchte ich, dass seine Sitzung beendet und zurück zur Anmeldeseite gesendet wird. login.php

Ich habe einige Lösungen versucht, wie

$_SESSION['role'] = $role; 
{ 
//check if user if signed in 
if($_SESSION['1'] == false) 
    { 
    echo 'Error. You do not have access'; 
    } 
} 
die(); 

auf jeder Seite setzen. Im Moment bekomme ich keine Fehler mit diesem Code. Aber es funktioniert auch nicht:/

Jede Hilfe wird geschätzt!

+0

Sie müssen Sitzung auf jeder Seite starten. Verwenden Sie diesen Code 'start_session()' auf jeder Seite? – Dalvik

Antwort

1
<?php 
//You can save user role in session like: 
define('ADMIN_ACCESS', 1); 
define('USER_ADMIN_ACCESS', 2); 
define('USER_ACCESS', 3); 

$_SESSION['role'] = ADMIN_ACCESS; // Admin (Any one of three) 
$_SESSION['role'] = USER_ADMIN_ACCESS; // User Admin (Any one of three) 
$_SESSION['role'] = USER_ACCESS; // User (Any one of three) 

//On every page, add a variable which user role can access this page. 

$requiredRole = ADMIN_ACCESS; 

//Write a custom function to check user role. 

function isAuthorized($requiredRole = NULL) { 
if (session_id() == '') { 
    return FALSE; 
} 
if (isset($_SESSION['role'])) { 
    if ($_SESSION['role'] == ADMIN_ACCESS) { 
    return TRUE; // Administrator has access to every page/functionality. 
    } 
    if ($requiredRole < $_SESSION['role']) { 
    return FALSE; 
    } 
} 
return FALSE; 
} 

//And now, check if user can access the page or not by calling the function. 
//On every page, add a variable which user role can access this page. 

$requiredRole = ADMIN_ACCESS; 
if (! isAuthorized($requiredRole)) { 
// Redirect user as he is not autorized. 
} 
?> 
+0

Wow, danke für die schnelle Antwort! Ich werde diese Lösung definitiv versuchen. Ich überprüfe, ob es funktioniert und komm zurück, um dir den grünen Scheck zu geben! : D –

+0

Entschuldigung. Ich bin ein dummer Typ: P ich fügte hinzu "define ('ADMIN_ACCESS', 1); definieren ('USER_ADMIN_ACCESS', 2); definieren ('USER_ACCESS', 3); $ _SESSION ['role'] = ADMIN_ACCESS; // Admin (Einer von dreien) $ _SESSION ['role'] = USER_ADMIN_ACCESS; // Benutzeradministrator (Einer von dreien) $ _SESSION ['role'] = USER_ACCESS; // Benutzer (Any one von drei) "in meiner Vorlage und der Rest in meiner Admin.php-Datei. Aber ich kann immer noch als normaler Benutzer dorthin navigieren. –

+0

Bitte studieren Sie den Code richtig und fügen Sie bei Bedarf Breakpoints/Echos hinzu. Sie werden das Problem lösen. – Pupil