• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Zugriffsrechte steuern mit PHP-Funktionen

Status
Für weitere Antworten geschlossen.

cromafia007

Neues Mitglied
Guten Abend allesamt

Bin gerade für ein kleines Panel Zugriffsrechte am hinzufügen.

Habe 4 Kategorien, bei denen es Rechte braucht:
Inhalt, News, Gästebuch und Einstellungen

Im Script verwende ich die Begriffe in Englisch.

Also content, news, gbook und settings.
Jeder Benutzer hat in einer MySQL Tabelle eine Spalte namens Rechte, dort drin stehen max. 4 Buchstaben. CNGS, für content, news, gbook und settings. Habe zur Testphase 2 Benutzer angelegt, einen der CNGS in der Spalte hat und der andere Benutzer hat keinen, also keine Zugriffsrechte.


Wenn sich der Benutzer einloggt, werden die Rechte aus der DB geladen und in eine Session ($_SESSION['rechte']) getan.

Nun habe ich jeweils 2 Funktionen gemacht, die zuerst die Rechte prüfen und dann die jeweilige Seite einfügt.

Nun weiss ich jedoch nicht, was ich falsch mache, er lässt beide Benutzer beides einsehen.

Hier der Quelltext:
PHP:
// functions.php

function rechte($rechte) {
    // Abprüfen
    $zgseite = array(); // Zugriffsrechte in Array
    $zgseite[0] = "C";
    $zgseite[1] = "N";
    $zgseite[2] = "G";
    $zgseite[3] = "S";
    
    if(!preg_match("/".$zgseite[$rechte]."/", $site_include))
    {
        echo'Zugriff verboten';
    }
    else
    {
        echo'Zugriff erlaubt';
    }
}

function subinclude($site_include) {
    // Möglichkeiten in ein Array. Jede Möglichkeit ist ein Ordner.
    $defined_panel = array();
    $defined_panel[0] = "maincontents";
    $defined_panel[1] = "subcontents";
    $defined_panel[2] = "content";
    $defined_panel[3] = "settings";
    
    // Abfrage
   // Abfrage
    if(isset($_GET['panel']))
    {
        if($_GET['panel'] == $defined_panel)
        {
            if(rechte($rechte = $_SESSION['rechte']) == $defined_panel) // Hier weiss ich nicht wie abprüfen, bzw. wie weiter.
            {
                include "datasub/" . $defined_panel . "/navi.php";
            }
        }
    }
    else
    else
    {
        echo'Main Subnavigation';
    }
}
Achja, $site_include ist einfach dann $_GET['panel'].

Aber hier weiss ich nicht wie weitermachen.

Hat jemand Erweiterungs oder Verbesserungsvorschläge?
Bin für alles offen.

Falls jemand eine ganz andere Struktur machen würde, bitte ich den mir zu sagen wie.


LG ;)
 
So hätte ich es gemacht ^^

PHP:
<?php

function getpages() {
    return array(
        'index' => 0x0000,
        'index_admin' => 0x0010,
        'index_edit' => 0x1100,
        '...' => 0x0000,
        '...' => 0x0000,
        '...' => 0x0000,
        '...' => 0x0000
    );
}

function rechte($rights) {
    if($rights & 0x0000) {
        return true;
    }
    
    $r = array(
        0x0001, // User Leserechte
        0x0010, // Admin Leserechte
        0x0100, // User Schreibrechte
        0x1000  // Admin Schreibrechte
    );
    
    foreach($r as $r_mask) {
        if($rights & $r_mask) {
            return true;
        }
    }
    
    return false;
}

function subinclude($seite) {
    $pages = getpages();
    
    if(array_key_exists($seite, $pages) && rechte($pages)) {
        include($seite.'php');
        return null;
    }
    
    include('index.php');
}

?>
 
ich würde das ganze direkt über dieFabrik machen, diese würde ich mit einem Oberver kombinieren, welche mit einer klasse zur verteilung der rechte (ähnlich wie Slibbo) kombiniert wird.

das ganze setzt natürlich vorraus, dass du die IO / DB Funktionen in php quasi auch überwachst oder eine alternative Klasse anlegst.

Zudem könntest das Bauen von einigen Klassen unterbinden.


Auch sehr interessant könnte die Zend_Acl Sein.
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben