2016-10-12 4 views
1

Angenommen, es gibt zwei Rollen: eine ist admin, eine andere ist restaurant_owner.Erlauben Sie mehreren Controllern Benutzern entsprechend ihrer Rolle in CakePHP

Ich möchte Zugriff auf einige der Seiten zu restaurant_owner geben.

In AppController habe ich beforeFilter Funktion verwendet. Hier ist der Code ..

public function beforeFilter() { 
    if($this->Auth->user('role') == 'restaurant_owner'){ 
    /* Controllers Name, that Admin want to give access to restaurant admin*/ 
     $this->loadModel('Userpermission'); 
     $AuthPermission = $this->Userpermission->find('first',array('conditions' => array('Userpermission.user_id' => $this->Auth->user('id')))); 
     print_r($AuthPermission); //returns controller names e.g. receipes, menuitems 
    } 
} 

Meine Frage ist, wie ich Zugriff auf Rolle außer restaurant_owner an alle Regler leugnen aber ein paar? Ich benutze CakePHP 2.x.

Antwort

2

Der richtige Weg, um dies zu handhaben, ist durch ControllerAuthorize und AuthComponent::isAuthorized() Rückruf.

Zuerst müssen Sie diese Funktionalität in AppController aktivieren. Bearbeiten Sie Ihre Auth config und Array und fügen Sie den folgenden:

public $components = array(
    'Auth' => array('authorize' => 'Controller'), 
); 

Dann fügen Sie die folgenden zu den Controllern, die restaurant_owner Zugriff haben sollte:

public function isAuthorized($user) { 

    if ($user['role']=="restaurant_owner") { 
     return true; 
    } 

    return parent::isAuthorized($user); 
} 

Schließlich fügen Sie folgendes zu AppController:

public function isAuthorized($user) { 

    if ($user['role']=="restaurant_owner") { 
     return false; 
    } 

    return true; //Every other role is authorized 
} 

Sie müssen die obige Logik an Ihre Bedürfnisse anpassen.

+0

es funktioniert .... :) –

Verwandte Themen