[PHP] Berechtigungen für Seiten

zerberos

Well-known member
ID: 58651
L
30 Mai 2006
75
0
Hallo,

ich habe vor, das man in meinem System einstellen kann, welcher Benutzer auf Welche Seite zugreifen kann.

Meine Datenbank sieht bis jetzt so aus:

Loginname
Passwort
E-Mail

Meine Prüfung ob man eingelogt ist:

PHP:
<?
session_start();
include 'sessionhelpers.inc.php';
if (isset($_POST['login']))
{
    $userid=check_user($_POST['username'], $_POST['userpass']);
    if ($userid!=false)
        login($userid);
    else
        echo 'Ihre Anmeldedaten waren nicht korrekt!';
}
if (!logged_in())
    {
Seiteninhalt
}
?>

sessionhelpers.inc.php
PHP:
<?
function connect()
{
    $con= mysql_connect('localhost','root','') or die(mysql_error());
     mysql_select_db('personal',$con) or die(mysql_error());
}

function check_user($name, $pass)
{
    $sql="SELECT UserId
    FROM users
    WHERE UserName='".$name."' AND UserPass=MD5('".$pass."')
    LIMIT 1";
    $result= mysql_query($sql) or die(mysql_error());
    if ( mysql_num_rows($result)==1)
    {
        $user=mysql_fetch_assoc($result);
        return $user['UserId'];
    }
    else
        return false;
}

function login($userid)
{
    $sql="UPDATE users
    SET UserSession='".session_id()."'
    WHERE UserId=".$userid;
     mysql_query($sql);
}

function logged_in()
{
    $sql="SELECT UserId
    FROM users
    WHERE UserSession='".session_id()."'
    LIMIT 1";
    $result= mysql_query($sql);
      return ( mysql_num_rows($result)==1);
}

function logout()
{
    $sql="UPDATE users
    SET UserSession=NULL
    WHERE UserSession='".session_id()."'";
     mysql_query($sql);
}

connect();
?>

Wie implementiere ich jetzt am besten son Berechtigungkonzept. Ich hab mir folgendes gedacht. Ich füge in die Tabelle alle Seitennamen ein und trage dann eine Null ein für nicht berechtigt und eine 1 für berechtigt. Und prüfe dann in der Lgoinabfrage ob für die aufgerufene Seite eine 1 in der Datenbank steht und zeige die Seite dann nur an. Ist das sinnvoll?
 
Nicht ganz sinnvoll. Das würde bedeuten, du hast a*b Zeilen in der Tabelle (a = n(User), b = n(Seiten)). Sinnvoller wäre, Default-Rechte zu vergeben (UserID 0 z.B.)

Existiert kein Eintrag unter dem Schlüssel (UserID, SeitenID), wird automatisch die Zeile (0, SeitenID) genommen.
Um Queries zu sparen, geh so vor:
Code:
[FONT=Courier New][B][COLOR=#9932cc]SELECT[/COLOR][/B] `canaccess` [B][COLOR=#9932cc]FROM[/COLOR][/B] `privileges` [B][COLOR=#9932cc]WHERE[/COLOR][/B] `site_id`=%u [B][COLOR=#9932cc]AND[/COLOR][/B] `user_id` [B][COLOR=#9932cc]IN[/COLOR][/B] (0,%u) [B][COLOR=#9932cc]ORDER[/COLOR][/B] [B][COLOR=#9932cc]BY[/COLOR][/B] `user_id` [B][COLOR=#9932cc]DESC[/COLOR][/B][/FONT]
Ist eine Alternativ-Berechtigung gesetzt, wird diese in der obersten Zeile zu finden sein. Existiert keine, so ist die Standard-Berechtigung mit der UserID 0 in der oberen (hier: einzigen) Zeile abzulesen.

Btw: SQL-Injections ? :roll:
 
Ich würd es so machen wie ich, wenn sich ein user anmeldet, bekommt er den wert 0 und der spalte rights, beim login wie diese spalte ausgelesen und in die session geschrieben, nochmaler user reht 0, admin recht 1!

Um zu schau ob er User oder Admin ist einfach abfragen:
PHP:
if($_SESSION['rights'] < 1) { 
echo 'nice try'; 
exit; } else { echo ''; }
 
@painchen:
Es geht nicht darum, einen User komplett auszuschließen, sondern nur jeweils für einzelne Seiten ;)
 
hab das jetzt soweit am laufen

ich habe jetzt ne seite gemacht mit checkboxen woman auswählen kann was der user sehen darf.

Wie kann ich jetzt abfragen ob bei der checkbox nen haken gesetzt ist oder nicht? weil ich möchte wenn ein hacken gesetzt ist eine 1 ist die datenbank hauen und bei nicht gesetzt halt eine null
 
Wie kann ich jetzt abfragen ob bei der checkbox nen haken gesetzt ist oder nicht? weil ich möchte wenn ein hacken gesetzt ist eine 1 ist die datenbank hauen und bei nicht gesetzt halt eine null
Naja, wenn sie gecheckt is, siehst du das doch.
Warum is niemand in der Lage selber rauszufinden, wie es funktioniert ? :-?
PHP:
print_r($_POST);
;)