2017-01-11 2 views
0

So habe ich 4 verschiedene Rollen, die in der Tabelle Benutzer sind Fremdschlüssel unter dem Attribut "role_id". Die Rolle role_id des Administrators ist gleich 1. Ich habe versucht, alle Benutzer zu blockieren, ABER der Administrator hat keinen Zugriff auf die Admin-Seiten wie die Indexseite des Benutzers.CakePHP 3 - Autorisierung mit nummerierten Rollen

Mein AppController ist wie folgt:

class AppController extends Controller 
{ 

public function initialize() 
    { 
     parent::initialize(); 

     $this->loadComponent('RequestHandler'); 
     $this->loadComponent('Flash'); 
     $this->loadComponent('Auth',[ 
      'authorize' => 'Controller', 
     ]); 

     $this->Auth->allow(['display', 'index', 'view', 'add']); 
    } 

public function isAuthorized($user) 
    { 
     // Default deny 
     return false; 
    } 
} 

Dann in dem Userscontroller:

class UsersController extends AppController 
{ 

public function initialize() 
    { 
     parent::initialize(); 
     // Add logout to the allowed actions list. 
     $this->Auth->deny(['index', 'add', 'view']); 
     $this->Auth->allow(['register', 'forgetpw', 'resetpw', 'logout']); 
    } 

public function isAuthorized($user) 
    {  
     if (in_array($this->request->action,['view', 'edit', 'index', 'add'])) { 
      return (bool)($user['role_id'] === '1'); 
     } 

     return parent::isAuthorized($user); 
    } 
} 

Jeder Benutzer kann die Ansichten zugreifen zu 'registrieren', 'forgetpw', 'resetPW' wie angegeben in der Initialisierungsfunktion des UsersControllers erlaubt sein. Kein Benutzer kann im Moment auf 'index', 'add', 'view' oder 'edit' zugreifen, auf die der Administrator zugreifen sollte.

Ich denke, wenn die Berechtigung für UserController-Seiten behoben werden kann, kann ich dies für alle anderen Controller anwenden.

Antwort

0

Okay ich denke, ich habe das Problem gelöst.

return (bool)($user['role_id'] === '1'); 

sollte

gewesen
return (bool)($user['role_id'] === 1);