SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Fortgeschrittene CSS-Techniken

Fortgeschrittene CSS-Techniken zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP für Fortgeschrittene und Experten

PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 23.10.2005, 16:55:31
nivram nivram ist offline
Junior Member
 
Registriert seit: Jul 2002
Ort: Heiden, NRW
Alter: 38
Beiträge: 218
Rechtesystem

Hallo zusammen,
ich bin gerade dabei mir ein sinnvolles Rechte-System für eine Art Community auszusuchen. Ich bin dabei auf das Binär-System gestoßen.

Sind meine Überlegungen sinnvoll?

- jede Funktion erhält eine vordefinierte Bit-Wertigkeit

Gästebuch-Eintrag machen > Bit 1 > Wertigkeit 1
Fotos hochladen > Bit 4 > Wertigkeit 8
Fotos löschen > Bit 5 > Wertigkeit 16

Nehmen wir an ein User darf Fotos löschen und Gästebuch-Einträge machen, dann hätte er die Wertigkeit 17!

10001 wäre dann der passende Binär-String!

Speichern würde ich aber nur die 17 in der DB!

Ist meine Idee praktikabel?? In wie weit würde ich Probleme bekommen die Rechte zu speichern (max. Speicherkapazität (oderso))? Wie kann man schnell und ohne Aufwand die Rechte sauber prüfen? Wieviele unterschiedliche Rechte wären da möglich?!

Gruß,
nivRam

Geändert von nivram (23.10.2005 um 16:56:47 Uhr)
Mit Zitat antworten
  #2  
Alt 23.10.2005, 17:19:44
Benutzerbild von Jürg
Jürg Jürg ist offline
Junior Member
 
Registriert seit: May 2003
Ort: CH Zürich
Alter: 66
Beiträge: 352
Jürg eine Nachricht über Skype™ schicken
AW: Rechtesystem

Das würde ich so nicht machen, denn was geschieht, wenn du ein zusätzliches Recht vergeben willst?
Aber die Idee mit einer Variablen ist gut, nur dann als Text und nicht als Zahl. So unter MySQL als CHAR und nicht als TINYINT!
Beispiel: Variable = '001001'
Kommt ein jetzt nicht bekanntes weiteres Recht dazu, so hinten eine 0 oder ein 1 angängen und alles läuft wie zuvor.
Zudem, eine 17 in der DB sagt dir nichts. Wenn Du alle User mit einem bestimmten Recht suchen willst, wird es kompliziert.
__________________
www.zudila.ch
Mit Zitat antworten
  #3  
Alt 23.10.2005, 17:56:14
nivram nivram ist offline
Junior Member
 
Registriert seit: Jul 2002
Ort: Heiden, NRW
Alter: 38
Beiträge: 218
AW: Rechtesystem

Das Problem was ich bei Deinem Vorschlag habe ist die Anzahl der Rechte. Was ist wenn ich mehr als 100 verschiedene Funktionen mit rechten ausstatten will?? Der String ist mir dann zu lang!

Ich habe jetzt das hier gefunden: http://www.tutorials.de/tutorials119693.html
(weiss jez nich ob ich dahin verweisen darf, sorry)

Aber da ist meine idee schonmal näher erläutert. Allerdings bekomme ich bei folgendem Script nicht das zurück was eigentlich sinnvoll wäre:
PHP-Code:
<?php
    $userrecht 
8//Dezimal
    
$systemrecht 2//dezimal
    
$ergebnis decbin($userrecht) & decbin($systemrecht);
    print 
"user-Recht: ".decbin($userrecht)."<br>";
    print 
"system-Recht: ".decbin($systemrecht)."<br>";
    print 
"Ergebnbis: ".$ergebnis;
?>
KOmisch..
Mit Zitat antworten
  #4  
Alt 23.10.2005, 21:05:47
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
AW: Rechtesystem

Zitat:
Zitat von Jürg
Das würde ich so nicht machen, denn was geschieht, wenn du ein zusätzliches Recht vergeben willst?
Das ist doch kein Problem. Wenn wir davon ausgehen, dass die Bits mit der Wertig keit 1, 2, 4, 8 und 16 bereits vergeben sind, würde das neu hinzugefügt Recht einfach die Wertigkeit 32 bekommen. An dieser Stelle haben alle bestehenden Benutzer natürlich noch keine Berechtigung.

Zitat:
Zitat von Jürg
Aber die Idee mit einer Variablen ist gut, nur dann als Text und nicht als Zahl. So unter MySQL als CHAR und nicht als TINYINT!
Warum den als CHAR? TINYINT bzw. ein anderer INTEGER-Spaltentyp ist da genau richtig. So kann man direkt mit einem bitweisen Vergleich innerhalb der Abfrage ermitteln, welche Benutzer ein bestimmtes Recht haben.

Nehmen wir mal an, ein Benutzer hat als Recht 17 eingetragen. In binärer Schreibweise würde das 10001 entsprechen. Er hat also Berechtigung für die Punkte, die 16 und 1 entsprechen. Welchem Recht nun das Bit mit der Wertigkeit 16 zugeschrieben ist, kann man dann sehr gut in einer Konstanten speichern.
Beispiel:
PHP-Code:
<?php
    
//  Benutzer darf Einträge...
    
define('LESEZUGRIFF'1);              #  ... einsehen
    
define('NEUANLAGERECHT'2);           #  ... anlegen
    
define('EDITIERRECHT'4);             #  ... bearbeiten
    
define('VEROEFFENTLICHENRECHT'8);    #  ... veröffentlichen
    
define('LOESCHRECHT'16);             #  ... löschen
?>
Folgendermaßen kann man dann ermitteln, welcher Benutzer das Recht hat, Einträge zu veröffentlichen. Wichtig ist nur, zu beachten, dass die Bitoperatoren von MySQL die Zahlen im Dezimalformat erwarten. Mit der MySQL-Funktion CONV() kann man Zahlen aber problemlos von einem Zahlensystem in das nächste umrechnen:
PHP-Code:
<?php
    $sql 
sprintf("SELECT
                        userid,
                        username
                    FROM
                        usertable
                    WHERE
                        userrights & CONV(%d, 2, 10)"
,
                
VEROEFFENTLICHENRECHT);
?>

Geändert von xabbuh (23.10.2005 um 21:25:51 Uhr)
Mit Zitat antworten
  #5  
Alt 23.10.2005, 22:05:12
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
AW: Rechtesystem

Zitat:
Zitat von xabbuh
Das ist doch kein Problem. Wenn wir davon ausgehen, dass die Bits mit der Wertig keit 1, 2, 4, 8 und 16 bereits vergeben sind, würde das neu hinzugefügt Recht einfach die Wertigkeit 32 bekommen.
Ich werde ja nicht müde, bei solchen Gelegenheiten auf den schönen MySQL-Spaltentyp SET und die MySQL-Funktion FIND_IN_SET() hinzuweisen. Da passen (in eine Spalte) 64 Rechte rein...
Mit Zitat antworten
  #6  
Alt 23.10.2005, 22:13:03
nivram nivram ist offline
Junior Member
 
Registriert seit: Jul 2002
Ort: Heiden, NRW
Alter: 38
Beiträge: 218
AW: Rechtesystem

Mhmmm.. Obwohl mir momentan 64 Rechte schon als ausreichend aussehen, werde ich mir das mal genauer Anschauen! Habe das schonmal in einem Forum gelesen, bin darauf aber nicht noch weiter eingegangen..

Was ist bei einem Rechte-System besser:

Einmal bei Login alle Rechte abzufragen, diese dann in einer Session speichern und dann auszulesen

oder

Die Rechte bei jeder Operation per SQL-Statement aus der DB zu holen! Wobei mehrere Rechtequeries auch in verschiedenen PHP_Dateien stattfinden und dabei womöglich bei einem Seitenaufruf aus 3 PHP-Dateien auch 2 Queries (finde ich zuviel und unnötig) stattfinden.
Mit Zitat antworten
  #7  
Alt 29.10.2005, 08:56:06
nivram nivram ist offline
Junior Member
 
Registriert seit: Jul 2002
Ort: Heiden, NRW
Alter: 38
Beiträge: 218
AW: Rechtesystem

Einer ne Idee was besser sein könnte?

Rechte beim Login abfragen (sind dann fest und für diese Sitzung gültig)

oder

Rechte "on the fly" abfragen (sind dann variabel und können sich innerhalb der Sitzung ändern)
Mit Zitat antworten
  #8  
Alt 29.10.2005, 10:56:32
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
AW: Rechtesystem

wenn du sie in der session speicherst als array sind sie starr für diese sitzung festgelegt, wäre mir zu unflexibel, also lieber das serialisierte array in der db "cachen" und falls sich was an den rechten ändert den "cache" in der db löschen.
Mit Zitat antworten
  #9  
Alt 30.10.2005, 02:05:16
nivram nivram ist offline
Junior Member
 
Registriert seit: Jul 2002
Ort: Heiden, NRW
Alter: 38
Beiträge: 218
AW: Rechtesystem

Was meinst du mit Cache in der DB? Verstehe ich irgendwie nich...
Mit Zitat antworten
  #10  
Alt 30.10.2005, 09:45:24
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
AW: Rechtesystem

du willst die rechte in der session speichern, d.h. du speicherst ein array in der session. wie wäre es, wenn du das array serialisierst und in der db speicherst.

so kannst du es - falls sich was ändert - löschen und neu erstellen, was mit einer session nicht möglich wäre.
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:13:55 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt