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

Rollenveraltung (CMS)

Im CMS wenden wir uns heute der Rollenverwaltung zu. Bisher gibt es in ContentLion drei Systemrollen:

  • Alle
  • Gast
  • Administrator

Damit man diese erweitern kann, werden unter Benutzer->Rollen bereits alle Rollen aufgelistet.

Basis für das Rollensystem ist die Klasse Role. Diese wird jetzt mit den Funktionen insert (einfügen) und delete(löschen) befüllt:

/system/classes/role.phpPHP
    public function insert(){
      $name = $GLOBALS['db']->EscapeString($this->name);
      $res =  $GLOBALS['db']->Execute("INSERT INTO {'dbprefix'}roles 
                                       (name) VALUES('".$name."')");
      Cache::clear("roles");
      return $res;
    }

    public function delete(){
      $res = false;
      if($this->ID > 3){
        $id = $GLOBALS['db']->EscapeString($this->ID);
        $res =  $GLOBALS['db']->Execute("DELETE FROM {'dbprefix'}roles 
                      WHERE id = '".$id."'");
        if($res) $res = $GLOBALS['db']->Execute("DELETE FROM 
                      {'dbprefix'}role_rights WHERE role = '".$id."'");
        if($res) $res = $GLOBALS['db']->Execute("UPDATE {'dbprefix'}user 
                      SET role = '1' WHERE role = '".$id."'");
        Cache::clear("roles");
      }
      return $res;
    }

Auf die Funktionen wird über die rolelist zugegriffen. Diese fragt die Parameter insert und delete ab und führt die jeweils gewünschte Aktion durch. Außerdem habe ich hier eine Aktionsliste (actionlist) erstellt.

/system/classes/rolelist.phpPHP
public function display(){
  $rolelist = new Template();
  $rolelist->load("role_list");

  $actions = ActionList::get("rolelist");

  if(isset($_GET['insert'])){
    $role = new Role();
    $role->name = $_GET['insert'];
    $role->insert();
  }

  if(isset($_GET['delete'])){
    $role = new Role();
    $role->ID = $_GET['delete'];
    $role->delete();
  }

  foreach(Role::getAllRoles() as $role){
    $index = $rolelist->add_loop_item("ROLELIST");
    $params = array();
    $params['id'] = $role->ID;

    $rolelist->assign_loop_var("ROLELIST", $index, "ID", $role->ID);
    $rolelist->assign_loop_var("ROLELIST", $index, "NAME", $role->name);
    $rolelist->assign_loop_var("ROLELIST", $index, "ACTIONS",
      $actions->getCode($params));
  }

  $rolelist->output();
}

In die Aktionsliste müssen wir nun das Löschen ermöglichen. Der Parameter ist hierfür wie delete. Der folgende SQL-Code legt die Aktion an:

Anlegen des LöschbuttonsSQL
INSERT INTO `clactionlists` (`category`, `id`, `icon`, `destination`,
         `label`)
          VALUES ('rolelist', 1, 'cross',
          '{VAR:HOST}/admin/roles.html?delete={VAR:ID}','{LANG:DELETE}');

Was jetzt noch fehlt ist das Formular zum Eintragen neuer Rollen. Dies können wir einfach in dem Template der rolelist anlegen:

/system/templates/role_list.htmlHTML
<table>
  <thead>
    <tr>
      <td><strong>{LANG:ID}</strong></td>
      <td><strong>{LANG:NAME}</strong></td>
      <td><strong>{LANG:ACTIONS}</strong></td>
    </tr>
  </thead>
  <tbody>
    {LOOP:ROLELIST}
    <tr>
      <td>{VAR:ID}</td>
      <td>{VAR:NAME}</td>
      <td>{VAR:ACTIONS}</td>
    </tr>
    {/LOOP:ROLELIST}
  </tbody>
</table>
<form method="GET" style="margin-top:30px;">
  <input name="insert" />
  <input type="submit" value="{LANG:ADD}" />
</form>

Das wars auch schon für heute. Beim nächsten Mal geht’s weiter mit den Benutzern.