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
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken |
23.10.2005, 15:55:31
|
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 15:56:47 Uhr)
|
23.10.2005, 16:19:44
|
|
Junior Member
|
|
Registriert seit: May 2003
Ort: CH Zürich
Alter: 66
Beiträge: 352
|
|
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.
|
23.10.2005, 16:56:14
|
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..
|
23.10.2005, 20:05:47
|
|
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 20:25:51 Uhr)
|
23.10.2005, 21:05:12
|
|
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...
|
23.10.2005, 21:13:03
|
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.
|
29.10.2005, 07:56:06
|
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)
|
29.10.2005, 09:56:32
|
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.
|
30.10.2005, 02:05:16
|
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...
|
30.10.2005, 08:45:24
|
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.
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
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.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 17:56:12 Uhr.
|