| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

01-10-2002, 11:58
|
Wotan
Master  
|
|
Registriert seit: Sep 2001
Ort: Berlin
Beiträge: 5.348
|
|
Wie setze ich Rechte um?
Komm nicht weiter.
Wie kann ich Rechte einzelner User im Forum umsetzen?
User 1 ist Gast
Als Gast darf er nur in allen offenen Foren lesen.
User 2 ist User noch nicht freigeschaltet
als User_un darf er nur in allen offenen Foren lesen.
User 3 ist User registriert
als User_reg darf er in allen offenen Foren Lesen und schreiben.
User 4 ist Mod
Als Mod darf er in allen Foren lesen und schreiben, sowie noch andere Sachen machen
User 5 ist Admin
Als Admin hat er alle Rechte
Wer kann mir auf die Sprünge helfen?
|

01-10-2002, 12:23
|
|
Troublegum
PHP Senior
|
|
Registriert seit: Dec 2001
Beiträge: 1.302
|
|
In Forensystemen wird üblicherweise ein Gruppensystem verwendet - weil es einfach sehr praktisch ist.
Du teilst deine Benutzer in verschiedene Gruppen ein:
User, Moderatoren, Admins, nicht aktivierte User
Gäste kommen automatisch in die Gruppe Gast.
Dann legst du für diese Gruppen einzeln die Zugriffsrechte fest und die Einstellungen etc. Der Benutzer bezieht seine Rechte dann ganz einfach aus seiner Gruppe.
__________________
"Los, lass uns loslegen! Hm ? Quatschen können wir hinterher immer noch!"
"Aber Bommel, wir können jetzt nicht bumsen. Wir müssen doch erst den Kindern - ... "
"Ja ja ja. Du willst immer nur das Eine. Buchstabenzeigen, Buchstabenzeigen - meine Gefühle sind dir wohl scheißegal."
© Harald Schmidt
|

01-10-2002, 12:37
|
Wotan
Master  
|
|
Registriert seit: Sep 2001
Ort: Berlin
Beiträge: 5.348
|
|
Das ist alles soweit klar.
Aber wie setze ich das Programmiertechnisch um?
Das wird doch eine enorme If-Abfrage, oder?
PHP-Code:
if($gruppe == Admin)
{
include("forum.inc.php");
}
if($gruppe == Mod)
{
include("forum.inc.php");
}
//usw
Oder wie soll das gehen?
|

01-10-2002, 12:41
|
|
pooky
Newbie
|
|
Registriert seit: Aug 2002
Beiträge: 49
|
|
Setz doch beim Einloggen einfach eine Session-Variable die du dann entsprechend abfragst:
PHP-Code:
if ($_SESSION["gruppe"] == "admin") { zeige_verstecktes_forum }
|

01-10-2002, 12:43
|
Wotan
Master  
|
|
Registriert seit: Sep 2001
Ort: Berlin
Beiträge: 5.348
|
|
Die Var wird doch schon mitgeführt.
aber um die Rechte zuermitteln muss ich doch trotzdem ein lange if-Abfrage machen, oder geht das auch anders.
|

01-10-2002, 12:45
|
|
pooky
Newbie
|
|
Registriert seit: Aug 2002
Beiträge: 49
|
|
Na ja, bei vier oder fünf Gruppen ist die Abfrage ja auch nicht sooo lang... dennoch würde man wohl eher switch verwenden.
|

01-10-2002, 12:53
|
Wotan
Master  
|
|
Registriert seit: Sep 2001
Ort: Berlin
Beiträge: 5.348
|
|
Egal wie. Ich kann so ohne weiteres keine Neue Usergruppe hinzufügen und darum geht es in zweiter Linie.
Wie kann ich die If-Abfrage so gestalten das wie dynamisch ist und das ich nicht soviele If schreiben muss.
|

01-10-2002, 12:58
|
|
Troublegum
PHP Senior
|
|
Registriert seit: Dec 2001
Beiträge: 1.302
|
|
Nene, du solltest das natürlich schon dynamisch machen.
Also die Zugriffsrechte in einer Tabelle speichern
und dann die Zugriffsrechte für diese Gruppe auslesen.
eine einfache if() Abfrage reicht dann:
if($permission==1)
{
// zeige Forum
}
else
{
// access denied
}
__________________
"Los, lass uns loslegen! Hm ? Quatschen können wir hinterher immer noch!"
"Aber Bommel, wir können jetzt nicht bumsen. Wir müssen doch erst den Kindern - ... "
"Ja ja ja. Du willst immer nur das Eine. Buchstabenzeigen, Buchstabenzeigen - meine Gefühle sind dir wohl scheißegal."
© Harald Schmidt
|

01-10-2002, 13:04
|
Wotan
Master  
|
|
Registriert seit: Sep 2001
Ort: Berlin
Beiträge: 5.348
|
|
Zitat:
Original geschrieben von Troublegum
if($permission==1)
{
// zeige Forum
}
else
{
// access denied
}
|
Aber damit habe ich doch nur ein Recht und nicht die Unterteilung nach alle User-Rechten.
|

01-10-2002, 13:20
|
Wotan
Master  
|
|
Registriert seit: Sep 2001
Ort: Berlin
Beiträge: 5.348
|
|
Wie sollte die Tabelle für die Recht aussehen?
Mach mal ein Vorschlag, Troublegum.
|

01-10-2002, 13:25
|
TBT
 Moderator
|
|
Registriert seit: Sep 2002
Ort: Berlin
Beiträge: 2.776
|
|
also ich habe mir eine Klasse "User" gebaut,
welche automatisch das Login gegenüber der DB abgleicht.
Wenn das Script auth.php durchlaufen ist, gibt es ein Objetk $user, welches alle Informationen enthält
usergruppe, rechte, ...
Bei allen Aktionen, die von anderen Scripten gemacht werden heißt es dann immer
PHP-Code:
if($user->get_right("right_abc"))
{
// alles ok mache irgendwas
}else{
// kein Recht zu dieser Aktion
}
PS: ich such auch noch eine clevere DB-Struktur für Rechte in einem Baum, undzwar so:
Tabelle
======
id
parent_id
...
Soll so laufen:
Wenn ein User das Recht xyz auf ID=1 hat soll er automatisch dieses Recht auch für alle haben, die darunter hängen. So wie die Verzeichnissrechte bei WinNT
Geht das irgendwie ohne dabei die DB mit SQL Abfragen zu überschütten?
Geändert von TBT (01-10-2002 um 13:28 Uhr)
|

01-10-2002, 13:45
|
Wotan
Master  
|
|
Registriert seit: Sep 2001
Ort: Berlin
Beiträge: 5.348
|
|
@TBT
kannst du mal die Klasse, die auth.php und eine Login-Seite als Anhang anhängen?
|

01-10-2002, 14:35
|
TBT
 Moderator
|
|
Registriert seit: Sep 2002
Ort: Berlin
Beiträge: 2.776
|
|
PHP-Code:
// auth.php
session_start();
$query = new Query( $DBinfo, true, false );
$action = isset( $HTTP_GET_VARS['action'] )?$HTTP_GET_VARS['action']:'';
if ( $action == "login" )
$user = new User( $query,
"login",
isset( $HTTP_POST_VARS['login_user'] )?$HTTP_POST_VARS['login_user']:"",
isset( $HTTP_POST_VARS['login_pass'] )?$HTTP_POST_VARS['login_pass']:"",
session_id() );
else
$user = new User( $query,
"return",
isset( $HTTP_SESSION_VARS['user_id'] )?$HTTP_SESSION_VARS['user_id']:( isset( $HTTP_COOKIE_VARS['user_id'] )?$HTTP_COOKIE_VARS['user_id']:1 ),
isset( $HTTP_SESSION_VARS['user_pass'] )?$HTTP_SESSION_VARS['user_pass']:( isset( $HTTP_COOKIE_VARS['user_pass'] )?$HTTP_COOKIE_VARS['user_pass']:"" ),
session_id() );
// ab hier ist $user gültig, und kann gefragt werden
PHP-Code:
// Klasse User
class User {
var $my_param;
var $sql1 = "select .. from .. where "; // SQL Abfrage für Userdaten
function User( &$query, $action = '', $name, $pass = "", $stamp = null, $mail = '' )
{
// DB Klasse übernehmen
$this->my_query = &$query;
// IP des Users holen
global $_SERVER;
$ip = $_SERVER['REMOTE_ADDR'];
if ( ( $ip == "127.0.0.1" ) && ( $_SERVER['HTTP_X_FORWARDED_FOR'] != "" ) )
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
// Aktion wählen
if ( $action == "get" ) {
// nur Infos holen, kein login !
$result = $this->my_query->select( $this->sql1 . " user_id=$name " );
// keine Cookies setzen oder Session eröffnen !
$this->set( "protected", 1 );
} elseif ( $action == "login" ) {
// Passwort crypten (simple zur Zeit)
$cpass = crypt( $pass );
// DB fragen
$result = $this->my_query->select( $this->sql1 . " upper(user_nick)='" . strtoupper( $name ) . "' and user_pass='$cpass' " );
if ( !$this->my_query->rows ) {
// login ungültig => loggen + Gast aus DB holen
// ...
} else {
// login gültig
// ...
}
} elseif ( $action == "return" ) {
// returning user
if ( $name != 1 ) // 1 = GAST !
$result = $this->my_query->select( $this->sql1 . " user_id=$name and user_pass='$pass' " );
else
$result = $this->my_query->select( $this->sql1 . " user_id=$name " );
// eine Zeile erhalten ?
if ( !$this->my_query->rows ) {
// login ungültig => loggen + Gast aus DB holen
// ...
} else {
// login gültig
// ...
}
}
// setzen der Uservariablen auf die Werte der DB
// ...
$this->set( "ip", $ip );
$this->set( "stamp", $stamp );
// ...
$this->set( "last_action", $result[0][3] );
$this->set( "nick", $result[0][4] );
$this->set( "id", $result[0][5] );
$this->set( "status", $result[0][6] );
// ...
}
// Eigenschaft speichern
function set( $param, $value = '' )
{
$this->my_param[$param] = $value;
}
// Eigenschaft ausgeben
function get( $param )
{
if ( isset( $this->my_param[$param] ) )
return $this->my_param[$param];
return false;
}
// $user->explain() zeigt zu jedem Zeitpunkt alle Eigneschaften an,
// kann gut benutzt werden, um Fehler zu finden
function explain()
{
echo "<table><tr><th>Variable</th><th>Wert</th></tr>";
reset ( $this->my_param );
while ( list( $key, $value ) = each ( $this->my_param ) )
echo "<tr><td>$key</td><td>$value</td></tr>";
echo "</table>";
}
}
|

01-10-2002, 14:43
|
Wotan
Master  
|
|
Registriert seit: Sep 2001
Ort: Berlin
Beiträge: 5.348
|
|
@TBT
Hast du das so in deinem Forum umgesetzt?
|

01-10-2002, 14:53
|
TBT
 Moderator
|
|
Registriert seit: Sep 2002
Ort: Berlin
Beiträge: 2.776
|
|
jup,
aber da ist das ganze noch nen bissel größer 
da wird noch viel mehr gemacht, außerdem gibt es da eine Klasse "BoardUser" welche von der Standardklasse "User" ableitet.
Dadurch kann ich den "User" in mehreren Projekten verwenden,
und dann immer die Anpassung in einer abgeleiteten Klasse vornehmen.
PS: Das Board arbeitet fast ausschließlich mit Klassen
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|