Seite 1 von 1

Rechte-Vergabe in der front_content.php ?

Verfasst: Di 14. Jun 2005, 16:03
von Condor
Tach zusammen :-),

ich habe jetzt diesen Teil in der front_content.php-Datei:

Code: Alles auswählen

if ($auth->auth["uid"] != 'nobody') {
    $sql = "SELECT funktion FROM con_phplib_auth_user_md5 WHERE user_id = '".$auth->auth["uid"]."'";
    $db->query($sql);
    if ($db->next_record()) {
        // gruppe gefunden
        $meine_funktion = $db->f("funktion");
        if ($meine_funktion == "PR") {
            $idcat = 181;
        }
        
        if ($meine_funktion == "PS") {
            $idcat = 210;
        }

        if ($meine_funktion == "GE") {
            $idcat = 246;
        }

        if ($meine_funktion == "OM") {
            $idcat = 248;
        }
        
        if ($meine_funktion == "KO") {
            $idcat = 299;
        }
        
        if ($meine_funktion == "WW") {
            $idcat = 300;
        }
        
        if ($meine_funktion == "GA") {
            $idcat = 301;
        }
        
        if ($meine_funktion == "KK") {
            $idcat = 302;
        }
        
        if ($meine_funktion == "SV") {
            $idcat = 303;
        }
        
    }
Jetzt zu meinem Problem, was ich vielleicht schon sogar vor einiger Zeit hier gepostet hab. Kann mich aber net mehr dara erinnern, also schlagt mich bitte net ;-)
Wenn ich jetzt angemeldet bin per Login-Modul, müsste doch der Zeiger auf dem Datensatz des aktuell eingeloggten Users liegen oder ? Ich habe in der oben genannten Tabelle eine zusätzliche Spalte Gruppe (Gruppe 1, Gruppe 2 usw.). Jetzt mal ein Beispiel: Ich habe einen Button auf meiner Seite, wenn er angeklickt wird soll geprüft werden ob der aktuelle User aus der Gruppe 1 oder Gruppe 2 ist. Wenn er aus Gruppe 1 ist dann kommt "Hallo" oder eine andere Aktion, ist er aber Gruppe 2 oder sonst eine andere dann kommt "Kein Zugang für Sie" oder sowas. Sollte das auch in die "front_content.php" oder muss das wo anders hin? Vielleicht könnte emergence mir etwas helfen, du müsstest ja langsam etwas mit meinen Problemen vertraut sein :-) Ich hoffe das mir überhaupt jemand Rat erteilen kann :-) Bis dann.

Verfasst: Di 14. Jun 2005, 18:13
von HerrB
Jetzt zu meinem Problem, was ich vielleicht schon sogar vor einiger Zeit hier gepostet hab. Kann mich aber net mehr dara erinnern, also schlagt mich bitte net
Machen wir nie, wir verweisen auf die Suchfunktion und die Möglichkeit, nach allen Beiträgen eines Nutzers zu suchen - oder Du klickst unter Deinem Eintrag auf "Profil" und wählst "Alle Beiträge des Nutzers".
Wenn ich jetzt angemeldet bin per Login-Modul, müsste doch der Zeiger auf dem Datensatz des aktuell eingeloggten Users liegen oder ?
Wenn Du mit Zeiger die Information über den angemeldetetn Nutzer meinst, den kann man mit $auth->auth["uid"] ermitteln.
Jetzt mal ein Beispiel: Ich habe einen Button auf meiner Seite, wenn er angeklickt wird soll geprüft werden ob der aktuelle User aus der Gruppe 1 oder Gruppe 2 ist. Wenn er aus Gruppe 1 ist dann kommt "Hallo" oder eine andere Aktion, ist er aber Gruppe 2 oder sonst eine andere dann kommt "Kein Zugang für Sie" oder sowas. Sollte das auch in die "front_content.php" oder muss das wo anders hin?
Nun, so ein JS-Fenster wird es nicht geben (wie ich mal annehme, Du Dir vorstellst), da Du sonst dem JS-Skripts alle erlaubten Accounts mitteilen müsstest - die man dann natürlich auslesen kann.

Sagen wir mal, der Nutzer kommt auf eine Seite, für die er grundsätzlich berechtigt ist. Darauf befindet sich eine Schaltfläche, die ihn auf eine weitere Seite weiterleitet und hier befindet sich sinniger Weise ein Modul, welches die Berechtigung abfragt und entsprechenden Code ausgibt (d.h. nicht berechtigt: "Nö!" oder berechtigt: "Yo!"). Ist jetzt nur ein Beispiel, da Du von Button gesprochen hast - Du kannst das erwähnte Modul natürlich gleich auf die erste Seite setzen...

Zum JS-Fenster: Es wäre natürlich möglich, die Seite, die das Modul mit der Überprüfung enthält, über eine JS-Funktion zu öffnen - mit dem gewünschten Effekt (die Überprüfung erfolgt durch die Seite, nicht durch den Button).

Gruß
HerrB

Verfasst: Di 14. Jun 2005, 20:12
von Condor
Hi,

danke erstmal für deine schnelle Antwort :-)

Zu 1: dann ist ja gut :-)
Zu 2: Ich meinte kein JavaScript :-) Sollte eh nur ein Bsp. sein. Irgendein Knopf erstellen und wenn man dann drauf klickt soll im nächsten Vorgang geprüft werden, so wie du es eigentlich beschrieben hast. Aber mein Problem ist z.B., ich weiss net welche Variablen ich nehmen soll, wegen Contenido als Bsp.:

Code: Alles auswählen

$auth->auth["uid"]
...hier befindet sich sinniger Weise ein Modul, welches die Berechtigung abfragt und entsprechenden Code ausgibt...
Wie soll das aussehen, welche Variablen soll ich benutzen ? Eigene oder brauche ich ausser Auth noch andere von Contenido ?

Ich hab da zwar rumgefummelt aber nix zustande bekommen, ich hab da kein Plan vll. bringst du mich auf den richtigen weg ? :-) Bis dann.

Verfasst: Mi 15. Jun 2005, 09:31
von emergence
mal was grundsätzliches zu $auth

wenn du diese tabelle um eigene felder(gruppe, funktion) erweiterst werden diese nicht automatisch in der $auth zur verfügung gestellt...

was in der variable gespeichert ist bekommst du über

<?php
print_r($auth);
?>

raus.

möchtest du zusätzliche werte dort speichern müsstest du die klasse conlib/auth.inc bzw local.php aufbohren...

und das ganze ist leider kein 5 minuten job...

deshalb hab ich dir das letzte mal geraten dies so zu selektieren.. in deinem fall müsstest du halt noch gruppe mit selektieren

Code: Alles auswählen

$sql = "SELECT gruppe,funktion FROM con_phplib_auth_user_md5 WHERE user_id = '".$auth->auth["uid"]."'"; 
und dann eine entsprechende if abfragen mit einbauen...
der code funktioniert in dem fall auch in einem modul...
(das mit der automatischen weiterleitung hingegen nur in der front_content.php)

Verfasst: Mi 15. Jun 2005, 13:31
von Condor
Hallo,

danke emergence. Ich wusste das du mir schon mal sowas geschrieben hast. Tut mir leid, aber ich sitze leider nicht jeden Tag dadran, da vergisst man manchmal sachen :-) In welche Datei soll jetzt deine Abfrage rein ? Oder soll ich ein eigenes Modul damit erstellen ? Bis dann.

Verfasst: Mi 15. Jun 2005, 13:53
von HerrB
Für Deinen Zweck in einem Modul (oder direkt im Layout, aber besser ist in einem Modul).

Gruß
HerrB

Verfasst: Mi 15. Jun 2005, 15:26
von Condor
Hi,

achso alles klar. Ich hab da aber noch ein Problem: Hab Contenido auf dem Webserver installiert, DB angelegt, Setup ausgeführt etc. Wenn ich mich jetzt bei Contenido anmelden möchte kommt diese Fehlermeldung:

Code: Alles auswählen

Fatal error: Call to undefined function: cinclude() in /home/htdocs/web9/html/cont/contenido/index.php on line 18
Das bezieht sich auf die Datei: "functions.i18n.php"

Was ist das denn wieder für ein Fehler ?

Verfasst: Mi 15. Jun 2005, 17:59
von HerrB
a) Hast Du die Konfigurationsdatei config.php gespeichert (müsste in contenido/includes liegen)?
b) Suche mal im Forum, dürfte was bekanntes sein.
c) Da es sich nicht um das eigentliche Thema handelt, mache ein neues Thema bei Installation auf.

Gruß
HerrB

Verfasst: Mi 15. Jun 2005, 19:44
von Condor
Hi,

hab ich gemacht. Keine Ahnung was das jetzt wieder ist. Lokal läuft es unf auf dem Server nicht.

Verfasst: Mi 15. Jun 2005, 20:24
von HerrB
Siehe c) und suche mal im Forum nach "undefined cInclude" (alle Wörter). Z.B.: http://www.contenido.org/forum/viewtopi ... 7139#47139

Gruß
HerrB

Verfasst: Mi 15. Jun 2005, 22:45
von Condor
Hallo,

schon gut. Hab den Fehler schon gefunden, die config.php war irgendwie falsch, hab sie gelöscht und Setup nochmal ausführen lassen. Jetzt hab ich aber ein ganz anderes Problem: Hab alles laufen, DB hab ich eingefügt aber jetzt funktionieren manche Menüunterpunkte nicht mehr, obwohl lokal alles geht ?! Wenn ich dann in Contenido reingehe um den Artikel zu bearbeiten kommt ein "Internal Server Error". In der "errorlog" steht dann sowas:

Code: Alles auswählen

[15-Jun-2005 23:41:17] MySQL error 1044: Access denied for user: 'web9@localhost' to database 'usr_web9_1'
lock tables con_sequence write
[15-Jun-2005 23:41:17] lock() failed.
[15-Jun-2005 23:41:17] cannot lock con_sequence - has it been created?
[15-Jun-2005 23:41:17] MySQL error 1062: Duplicate entry '0' for key 1
Ne idee was man da machen kann ?

Verfasst: Mi 15. Jun 2005, 22:46
von timo

Verfasst: Di 5. Jul 2005, 08:33
von Condor
Hallo,

ich bins nochmal. Diese Funktion in der front_content.php lässt mich nicht in ruhe :-) :

Code: Alles auswählen

if ($auth->auth["uid"] != 'nobody') { 
    $sql = "SELECT funktion FROM con_phplib_auth_user_md5 WHERE user_id = '".$auth->auth["uid"]."'"; 
    $db->query($sql); 
    if ($db->next_record()) { 
        // gruppe gefunden 
        $meine_funktion = $db->f("funktion"); 
        if ($meine_funktion == "PR") { 
            $idcat = 181; 
        } 
        
        if ($meine_funktion == "PS") { 
            $idcat = 210; 
        } 

        if ($meine_funktion == "GE") { 
            $idcat = 246; 
        } 

        if ($meine_funktion == "OM") { 
            $idcat = 248; 
        } 
        
        if ($meine_funktion == "KO") { 
            $idcat = 299; 
        } 
        
        if ($meine_funktion == "WW") { 
            $idcat = 300; 
        } 
        
        if ($meine_funktion == "GA") { 
            $idcat = 301; 
        } 
        
        if ($meine_funktion == "KK") { 
            $idcat = 302; 
        } 
        
        if ($meine_funktion == "SV") { 
            $idcat = 303; 
        } 
        
    } 
Das Problem ist, wenn jemand Mitglied in Gruppe 1 UND Gruppe 2 ist, muss er sich 2 mal in der DB befinden. Ich dachte ich erweitere die Tabelle mit Spalten wie Gruppe1, Gruppe2 etc. Dort steht dann Ja oder Nein. Wie müsste die oben genannte Abfrage dann geändert werden damit es nachschaut ob Ja oder Nein steht. Wenn Ja dann lässt er mich rein, wenn Nein dann verlinkt er auf eine Fehlerseite. Wie müsste ich das umändern ? Hab da was probiert aber nicht das richtige gefunden, wahrscheinlich benutze ich mal wieder falsche Variablen oder so.

Müsste diese Funktion:

Code: Alles auswählen

$sql = "SELECT funktion FROM con_phplib_auth_user_md5 WHERE user_id = '".$auth->auth["uid"]."'"; 
jetzt so aussehen:

Code: Alles auswählen

$sql = "SELECT gruppe1,gruppe2,gruppe3 FROM con_phplib_auth_user_md5 WHERE user_id = '".$auth->auth["uid"]."'"; 
Nur die Funktion würde dann nicht mehr stimmen. Sprich:

Code: Alles auswählen

$meine_funktion = $db->f("funktion"); 
        if ($meine_funktion == "PR") { 
            $idcat = 181; 
        }
würde nicht mehr gehen. Es soll ja so aussehen:

Code: Alles auswählen

if (gruppe1 == "JA") {
   $idcat = 181;
}
else
{
$idcat = 12; //Fehlerseite
}

if (gruppe2 == "JA") {
   $idcat = 182;
}
else
{
$idcat = 12; //Fehlerseite
}

...
Das war jetzt nur theoretisch gemeint.

Deshalb ist mir eure Meinung dazu wichtig. Bis dann.

ERGÄNZUNG:

Mir fällt gerade ein, das:

Code: Alles auswählen

if (gruppe2 == "JA") {
   $idcat = 182;
eigentlich egal ist, da ich in jedem Bereich ein anderes Login-Modul habe und im Login-Modul auf die entsprechende Seite verlinkt wird. Es müsst nur gebprüft werden ob Ja oder Nein in der DB steht. Wenn Ja dann lässt mich das Login-Modul rein, wenn Nein dann komme ich auf die Fehlerseite. Ich hoffe jemand weiss wie das alles gemeint ist :-)