0251 / 590 837 15
info@a-coding-project.de
;

Die Role Klasse (CMS)

In unserem CMSwird heute die Klasse Role erstellt. Diese ist für die Rechteverwaltung zuständig. In diesem Beitrag werden wir aber erst mal nur der Namen der Rolle speichern, die Rolle einen Benutzer zuordnen und letztendlich anzeigen.

Für die Zuordnung müssen wir noch mal was an der Datenbank ändern: Die Tabelle cms_user braucht die spalte role:

ALTER TABLE `cms_user` ADD `role` INT( 10 ) NOT NULL ;

Natürlich muss unser Admin auch die Rolle Administrator zugeordnet sein:

UPDATE `cms_user` SET `role` = '2' WHERE `name` = 'admin';

Das ganze muss wieder im /installer/installer.php bearbeitet werden:

mysql_query("CREATE TABLE `".$this->params[3]['praefix']."user` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(50) NOT NULL,
  `password` varchar(50) NOT NULL,
  `role` int(10) NOT NULL,
  PRIMARY KEY  (`id`,`name`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;");

und weiter unten:

mysql_query("INSERT INTO `".$this->params[3]['praefix']."user` VALUES (1, '".$this->params[4]['user']."', '".md5($this->params[4]['password'])."',2);");

Die neue Klasse /system/classes/role.php kann sich zu erst nur selbst laden:

<?PHP
  class Role{
    public $name = "";
    public $ID   = -1;
    
    public function load($id){
      $id   = $GLOBALS['db']->EscapeString($id);
      $role = $GLOBALS['db']->ReadRow("SELECT * FROM {'dbprefix'}roles WHERE id = '".$id."'");
      if($role){
        $this->name = $role->name;
        $this->ID   = $role->id;
      }
    }
      
  }
?>

Die Klasse /system/classes/user.phphat nun die neue Eigenschaft role. Außerdem wird bei der Methode getAllUser auch die Rolle geladen. Wenn wir auf die Rechteverteilung zugreifen möchten, müssen wir hier später noch eine load-Methode einbauen. Hier erstmal der neue Code:

<?PHP
class User{
  public $name;
  public $role;
  
  function login($name,$password){
    $password = $GLOBALS['db']->EscapeString(trim($password));
    $this->name = $GLOBALS['db']->EscapeString(trim($name));
    if($this->checkPassword($password)){
      return true;
    }
    else{
      return false;
    }
  }

  function checkPassword($password){
    $password =$GLOBALS['db']->EscapeString(trim($password));
    $name = $GLOBALS['db']->EscapeString(trim($this->name));
    $count = $GLOBALS['db']->ReadField("SELECT COUNT(*) FROM {'dbprefix'}user WHERE 
                        name='".$name."' AND password = '".md5($password)."'");
    return $count == 1;
  }
  
  function logout(){
     session_destroy();
  }
  
  function getAllUser(){
    $users = $GLOBALS['db']->ReadRows("SELECT * FROM {'dbprefix'}user ORDER by name");
    foreach($users as $user){
      $newUser = new User();
      $newUser->id   = $user->id;
      $newUser->name = $user->name;
      $newUser->role = new Role();
      $newUser->role->load($user->role);
      $res[] = $newUser;
    }
    return $res;
  }
}
?>

Als nächstes kommen wir zum Anzeigen der Rolle im Admin Bereich. Hier hatten wir die Liste (fälschlicherweise) MENU genannt. Ich denke USERLIST ist eine bessere Bezeichnung. Deswegen muss nun das Template so geändert werden (/system/templates/user-list.html):

<table>
  <thead>
    <tr>
      <td><strong>ID</strong></td>
      <td><strong>Name</strong></td>
      <td><strong>Rolle</strong></td>
      <td><strong>Aktionen</strong></td>
    </tr>
  </thead>
  <tbody>
    {LOOP:USERLIST}
    <tr>
      <td>{VAR:ID}</td>
      <td>{VAR:NAME}</td>
      <td>{VAR:ROLE}</td>
      <td>{VAR:ACTIONS}</td>
    </tr>
    {/LOOP:USERLIST}
  </tbody>
</table>

Und nun die Zuweisung im in der Datei /admin/includes/user.php:

<h1>Benutzer</h1>
<?PHP
  $userlist = new Template();
  $userlist->load("../system/templates/user_list.html");

  foreach(User::getAllUser() as $user){
    $index = $userlist->add_loop_item("USERLIST");
    $userlist->assign_loop_var("USERLIST", $index, "ID", $user->id);
    $userlist->assign_loop_var("USERLIST", $index, "NAME", $user->name);
    $userlist->assign_loop_var("USERLIST", $index, "ROLE", $user->role->name);
  }

  $userlist->output();
?>