PHP dynamisches Rechtesystem

Blackbenji

Lieutenant
Registriert
Nov. 2009
Beiträge
565
Hallo zusammen,

ich versuche gerade ein dynamisches Rechtesystem zu basteln.

Als Anforderung stehen folgende Punkte:
- der "Admin" sollte neue Gruppen anlegen können
- der "Admin" kann den Gruppen jeweils Rechte zuweisen

Ich überlege nun gerade welcher Ansatz am Sinnvollsten und am Sichersten ist?

mein db-design sieht so aus.

db user_rules:
PHP:
id | group_name
1 | news_author
db | group_rules:
PHP:
id | group_id | news_posten | news_editieren | news_löschen | news_deaktivieren | kommentare_deaktivieren
1 | 1 | true | true | false | false | true

soweit so gut. ist es sicher genug die daten pro user abzufragen und dann in sessions zu speichern und diese im template abzufragen? zb

PHP:
    <h3>Content</h3>
    <p>
        <?php if(isset($_SESSION['news_posten'])) { ?><a href="admin.php?nav=admin_content_write">&middot;  News schreiben</a><br /><?php } ?>
        <?php if(isset($_SESSION['news_editieren'])) { ?><a href="admin.php?nav=admin_content_list">&middot;  News editieren</a><br /><?php } ?>
    </p>

sieht mir dann doch sehr umfangreich aus ...
 
Du solltest dir eher die Frage stellen: Was passiert, wenn jemand ohne Schreibrechte "admin.php?nav=admin_content_write" aufruft?

Du solltest eher den Ansatz wählen: Rendere nur, was der User sehen darf. Darf er eine Seite nicht sehen, dann knall ihm ein Sperrschild vor den Latz.
Ich würde da auch nicht über die Session gehen sondern zur Laufzeit aus der Datenbank prüfen, was der User für Rechte hat. So eine Session kann ja schließlich auch etwas länger leben. Dann nimmst du evtl. jemandem in der DB Rechte weg, er hat sie aber laut Session noch.
 
die admin seiten lassen sich nur mit aktivem login aufrufen, wenn nicht, wird das loginfenster aufgerufen.

deinen ansatz werde ich aber mal überdenken.
 
folgende idee:

bei jedem aufruf der loginseite werden die userrechte aus der datanbank abgefragt, entsprechend werden zu den berechtigungen die menüs gebaut.

abfrage stellt kein problem dar.

mein ansatz war es nun für jede zugriffsart ein array aufzubauen.

zb so:

PHP:
        if($check == "true") {
            $check_array = array(
                'check' => array(
                    'name' => 'check',
                    'error_log' => array(
                        'name'=>'Error Log',
                        'url' => 'admin.php?nav=admin_check&file=error'
                    ),
                    'notice_log' => array(
                        'name'=>'Notice Log',
                        'url' => 'admin.php?nav=admin_check&file=notice'
                    ),
                    'warning_log' => array(
                        'name'=>'Warning Log',
                        'url' => 'admin.php?nav=admin_check&file=warning'
                    ),
                ),
            );
        }

es gäbe dann mehrere arrays dieser art zb für content, usw.
am ende sollen dann alle arrays gemerged werden und an das template übergeben werden.

problem: wenn ein array leer ist, ist das gemergede array auch leer.

ist mein ansatz komplett falsch oder muss ich die arrays vor dem mergen überprüfen?
Ergänzung ()

lies sich gerade mit etwas suche im web selber lösen:

PHP:
        $menu_array = array_merge(
            $this->arr($home_array),
            $this->arr($check_array),
            $this->arr($content_array),
            $this->arr($comments_array)
        );

        )function &arr(&$a) {
        settype($a,'array');
        return $a;
    }
 
Zurück
Oben