denkansatz gesucht(rechte)

therealcharlie

Erfahrenes Mitglied
also, ich habe ein loginsystem mit mehreren userleveln. diese werden numerisch in einer db gespeichert.

nun, wenn ich folgende Usergruppen habe:

Bekannte
Freunde
Familie
Partner
VIPS

und ich will, dass alle getrennt sind, also nicht die freunde bilder von bekannten sehn oder umgekehrt, aber dass vips alles sehn können, wie muss ich dann vorgehen? eine eigene zelle für VIP möchte ich eigentlich nicht machen, da ich schon eine eigene habe, um admins zu identifizieren.
habs nicht so mit mathe, wär dankbar für einen guten ansatz.
 
Ich würde statt der Spalte, die den Admin identifiziert, eine Spalte Userlevel verwenden, die je nach Level eine andere Nummer erhält:

1 = Bekannte
2 = Freunde
3 = Familie
4 = Partner
5 = VIPS
6 = Admin

Somit steht es Dir auch weiterhin frei, andere Berechtigungsgruppen anzulegen.
 
Original geschrieben von therealcharlie
nein, so funktioniert dass leider nicht, weil, wenn ich 2 verschiedene gruppen zugreifen lassen will, stehe ich an.
Klar funktioniert das. In der Spalte, wo Du die jeweiligen Userrechte speicherst, speicherst Du einfach mehrere, getrennt durch ein von dir zuvor definiertes Trennzeichen. Beim Zugriff liest Du einfach wieder alle Werte aus, trennst sie an dem Trennzeichen und vergleichst die Werte miteinander.
 
Der Userlevel wird zu jedem Nutzer-Datensatz angegeben. Die Bilder ordnest Du einem Userlevel zu (Bsp. Familie), und filterst die Bilder-Datensätze nach dem Userlevel des aktuellen Benutzers. Somit bekommt ein Nutzer des Levels Famile nur die Familenbilder zu sehen. Nur für den VIP machst Du eine Ausnahme, indem dieser alle Bilder, unabhängig vom Level anschauen kann.

snuu
 
Das wäre jetzt mein Ansatz:
PHP:
"SELECT * FROM Tbilder WHERE Gruppe=".$gruppe." OR ".$gruppe."=5"
Natürlich solltest du den Stern durch deine Spaltennamen ersetzen.:)
 
gut, also wenn ich es so mache, dann brauch ich eine spezielle mysql-query.
folgendes szenario:
ich habe in der vairable $user_rang den rang des users (freund, familie,etc..) und eine zelle in einer tabelle, in der mehrere dieser ränge din sind (z.b. partner und bekannte). nun will ich irgendwie sehen, ob $user_rang in dieser zelle steht. wie mach ich das?
 
Ich nehme an, du meinst folgende Tabellenstruktur (vereinfacht):

Tabelle benutzer
benutzer | rang
Hans | 2
Maria | 4

Tabelle raenge
rang_id | rang
2 | Familie
4 | Bekannte


Eine geeignete Abfrage wäre folgende:
PHP:
$sql = mysql_query("SELECT * FROM benutzer b, raenge r WHERE b.rang = r.rang_id");

PS: Falls du den Rängen keine ID gegeben, sondern diese als Text bei den einzelnen Nutzern gespeichert hast, dann vergleichst du eben einfach b.rang mit r.rang oder je nachdem wie deine Felder in den Tabellen heißen).
PPS: Groß- und Kleinschreibung nicht vernachlässigen!
 
Hallo,

bei so wenigen Gruppen gehts auch schön mit binären Zahlen :D
Dabei müssen die Rechte aber so aussehen:

32 - Bekannte
16 - Freunde
8 - Familie
4 - Partner
2 - VIPS
1 - Admins

und die Funktion so (oder ähnlich):
PHP:
function recht_ok($rechte_page, $rechte_user) {
    $ret = 0;
    //Die Rechte von dez in bin umwandeln und umdrehen
    $rechte_page = strrev(decbin($rechte_page));
    $rechte_user = strrev(decbin($rechte_user));
    // Hier 6 Gruppen, ansonsten anpassen
    for($i=6;$i>-1;$i--) {
        // Prüfen ob die Seite für die Gruppe lesbar ist und der User zu der Gruppe gehört
        if(substr($rechte_page,$i,1) == 1 && substr($rechte_user,$i,1) == 1) {
            $ret = 1;
        }
    }
    return $ret;
}

Beispiele:

Seite lesbar für Freunde und Partner = 20
User hat Gruppe Freunde = 16
rechte_ok(20, 16) ergibt true

Seite lesbar für Partner = 4
User hat Gruppe Freunde und Bekannte = 48
rechte_ok(4, 48) ergibt false

Is mal ein Denkansatz :o)

ciao Toni
 
@camelmed ah sehr gute lösung thx.

Und wie vereinheitliche ich es am besten? Also Jede Page bekmkomt nen standartheader mit der überrpüfung?
Am besten alles in ne if haun oder ne die routine?
 
Zurück