darph
2005-10-01, 01:57:30
Ich bastel gerade die Recheverwaltung zusammen.
Hier mal der relevante Auszug aus der Userklasse:
<?php
define("PERMISSION_NONE", 0x0001); // Don't touch. Don't look. Banned usernames par example.
define("PERMISSION_GUEST", 0x0002); // Guests may look, but not intefere
define("PERMISSION_POST", 0x0004); // Write entries/articles/posts
define("PERMISSION_COMMENT", 0x0008); // Write comments on published entries
define("PERMISSION_EDIT", 0x0010); // Edit entries and comments
define("PERMISSION_ADMIN", 0x0020); // Administrate the plock
class User
{
private $permission = PERMISSION_GUEST;
public function addPermission($myPermission)
{
if (User::isPermission($myPermission))
{
$this->permission |= $myPermission;
return TRUE;
}
return FALSE;
}
public function stripPermission($myPermission)
{
if (User::isPermission($myPermission))
{
$this->permission &= $myPermission;
return TRUE;
}
return FALSE;
}
public function isPermission($myPermission)
{
return ( ($myPermission & (PERMISSION_NONE | PERMISSION_GUEST
| PERMISSION_POST | PERMISSION_COMMENT
| PERMISSION_EDIT | PERMISSION_ADMIN)) == $myPermission);
}
BenutzerRecht wird aus einer Datenbank ausgelesen.
So.
Jetzt hab ich für jedes "Recht" eine Checkbox. Diese überprüfe ich wie folgt:
if ($_POST["perm_none"] == "set") {
echo("+");
$user->addPermission(PERMISSION_NONE);
} else {
echo("-");
$user->stripPermission(PERMISSION_NONE);
}
So. Das mache ich für jedes Recht und führe dann eine update() Methode aus, die das ganze in die Datenbank prügelt.
Wenn ich jetzt überall einen Haken hin mache, dann geht das auch.
Nehmen wir also an, wir haben einen User, der alle Rechte hat (also auch gebannt ist, aber egal).
Dann gehe ich hin und entziehe dem User die Adminrechte.
Ergebnis:
Er hat keine Rechte, außer dem Adminrecht.
Warum?
Hier mal der relevante Auszug aus der Userklasse:
<?php
define("PERMISSION_NONE", 0x0001); // Don't touch. Don't look. Banned usernames par example.
define("PERMISSION_GUEST", 0x0002); // Guests may look, but not intefere
define("PERMISSION_POST", 0x0004); // Write entries/articles/posts
define("PERMISSION_COMMENT", 0x0008); // Write comments on published entries
define("PERMISSION_EDIT", 0x0010); // Edit entries and comments
define("PERMISSION_ADMIN", 0x0020); // Administrate the plock
class User
{
private $permission = PERMISSION_GUEST;
public function addPermission($myPermission)
{
if (User::isPermission($myPermission))
{
$this->permission |= $myPermission;
return TRUE;
}
return FALSE;
}
public function stripPermission($myPermission)
{
if (User::isPermission($myPermission))
{
$this->permission &= $myPermission;
return TRUE;
}
return FALSE;
}
public function isPermission($myPermission)
{
return ( ($myPermission & (PERMISSION_NONE | PERMISSION_GUEST
| PERMISSION_POST | PERMISSION_COMMENT
| PERMISSION_EDIT | PERMISSION_ADMIN)) == $myPermission);
}
BenutzerRecht wird aus einer Datenbank ausgelesen.
So.
Jetzt hab ich für jedes "Recht" eine Checkbox. Diese überprüfe ich wie folgt:
if ($_POST["perm_none"] == "set") {
echo("+");
$user->addPermission(PERMISSION_NONE);
} else {
echo("-");
$user->stripPermission(PERMISSION_NONE);
}
So. Das mache ich für jedes Recht und führe dann eine update() Methode aus, die das ganze in die Datenbank prügelt.
Wenn ich jetzt überall einen Haken hin mache, dann geht das auch.
Nehmen wir also an, wir haben einen User, der alle Rechte hat (also auch gebannt ist, aber egal).
Dann gehe ich hin und entziehe dem User die Adminrechte.
Ergebnis:
Er hat keine Rechte, außer dem Adminrecht.
Warum?