2016-05-20 2 views
-2

Ich bin neu auf CakePHP. Ich habe einen Code für die Anmeldung implementiert und ich versuche, eine rollenbasierte Aktion für verschiedene Benutzer bereitzustellen. Wie ich habe eine Tabelle, in der ich ID und Rolle (Admin, Normal, SubAdmin) speichern. Ich möchte, dass Super Admin kann löschen Update hinzufügen und bearbeiten und anzeigen Everones Datensatz. Der Administrator kann nur Benutzer hinzufügen und löschen und seinen Datensatz nicht löschen/bearbeiten. Wie könnte ich das erreichen?Wie funktioniert die rollenbasierte Autorisierung nach dem Login in CakePHP 2.7?

+0

[Wenn Sie eine Frage zu einem Problem, indem Sie den Code verursacht fragen , erhalten Sie viel bessere Antworten, wenn Sie Code zur Verfügung stellen, den Leute verwenden können, um das Problem zu reproduzieren] (http://stackoverflow.com/help/mcve) – swiftBoy

+0

Willkommen zu SO, seien Sie bitte ein bisschen spezifischer, wenn Sie questi anfragen on: was hast du probiert, was erwartest du, etc. Siehe [how to ask] (http://stackoverflow.com/help/how-to-ask) – Nehal

Antwort

0

Sie durch die Verwendung tun können diesen Code

In Ihrem App Controller:

class AppController extends Controller { 
public $components =array(
        'Session', 
        'Flash', 
        'Auth'=>array(

        'authenticate' => array(
        'Form' => array(
        'fields' => array('username' => 'Email','password'=>'Passward'), 
        )), 
        'loginRedirect'=>array('controller'=>'Users','action'=>'index'), 
        'logoutRedirect'=>array('controller'=>'Users','action'=>'login'), 
        'authError'=>"You Can't access this page", 
        'authorize' => array('controller') 
       ) 
        ); 

public function beforeFilter() 
{ 
    $this->Auth->allow('index'); 
} 
public function isAuthorized($user) 
{ 
     return true; 
} 
} 

In Ihrem Benutzer Controller:

class UsersController extends AppController { 

public $helpers = array('Html', 'Form','Session','Flash'); 
public function beforeFilter() 
{ 
    parent::beforeFilter(); 
    $this->Auth->allow('add'); 
} 
public function isAuthorized($user) { 
    // The owner of a post can edit and delete it 
    if (in_array($this->action, array('edit', 'delete'))) { 

    switch ($user['Role']) { 
     case "Super user": 
     return true; 
     break; 
     case "Admin": 
     if($user['id']==$this->request->params['pass'][0]) 
     { 
      return false; 
     } 
     else 
     { 
      return true; 
     } 
     break; 
     default: 
      return false; 
    } 

    } 
    return true; 
} 
+0

ist dieser hilfreiche code wenn ich mehr als einen controller mit habe Viele Aktionen und viele verschiedene Ansichten in verschiedenen Ordnern mit dem gleichen Namen von Controllern. –

+0

Bitte geben Sie Ihren Code oder eine kurze Erklärung, was Sie genau tun wollen, damit ich Ihr Problem verstehen kann. –

Verwandte Themen