2017-06-13 26 views
0

Meine Admin-Hub-Seite befindet sich derzeit im PagesController (namens admin). Sowohl nicht angemeldete Benutzer als auch Benutzer ohne Administratorrechte können jedoch auf diese Hub-Seite zugreifen, auch wenn sie nicht auf alle Verbindungen von diesem Hub aus zugreifen können.CakePHP 3 - Autorisierung für Seiten auf PagesController

Edit: Ich habe gerade festgestellt, dass es wahrscheinlich nicht funktioniert, weil "admin" keine Funktion im PagesController ist, sondern eher unter "display" fällt.

Mein AppController ist wie folgt:

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

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

    $this->Auth->allow(['display']); 
} 

public function beforeFilter(Event $event) 
{ 
    $this->Auth->deny(['admin']); 

} 

Mein PagesController wie folgt:

public function initialize() 
{ 
    parent::initialize(); 
    $this->Auth->deny(['admin']); 
} 

public function isAuthorized($user) 
{ 
    if (in_array($this->request->action,['admin'])) { 
     return (bool)($user['role_id'] === 1); //where role_id = 1 refers to an admin 
    } 
    return parent::isAuthorized($user); 
} 

Antwort

0

Sie überprüfen gegen die Aktion, nicht das Präfix. Documentation schlägt vor, dass Sie was Sie wollen, ist

if ($this->request->getParam('prefix') === 'admin') 
+0

Hinweis nicht getestet worden, dass [ein anderes Bit der Dokumentation] (https://book.cakephp.org /3.0/en/controllers/components/security.html#usage) würde bedeuten, dass 'if ($ this-> request-> getParam ('admin')) 'der richtige Weg ist. Ich benutze kein Administrator-Routing, daher kann ich nicht einfach bestätigen, welches richtig ist oder ob beide akzeptabel sind. –

1

Die Auth-> deny() Funktion unauthoried Benutzern den Zugriff auf Aktionen zu verhindern. Auf der anderen Seite soll die Funktion Auth-> allow() der Öffentlichkeit Zugriff auf bestimmte (oder alle) Aktionen geben.

Bitte lesen Sie die Dokumentation hier: https://book.cakephp.org/3.0/en/controllers/components/authentication.html#making-actions-require-authorization

Für die Auth Komponente zu arbeiten, wie Sie es brauchen folgendes lesen: vorausgesetzt, Sie haben einen anderen Admin-Benutzer-Datenbanktabelle und Sie möchten, dass die Besucher fragen, Anmeldeinformationen die für den Zugriff auf eingeschränkte Seite, können Sie Folgendes tun:

im AppController, wenn Benutzer die eingeschränkte Seite besuchen, oder in Ihrem Fall, wenn Benutzer auf den SeitenController zugreifen, die Auth-Komponente laden und sicherstellen, dass die Admin-Benutzer-Tabelle entweder in der Auth definiert ist Bei der Benennung der Tabelle wurden die Konventionen für Komponenten oder CakePHP eingehalten.

In AppController

public function initialize() 
{ 
    parent::initialize(); 
    if ($this->request->params["controller"] == 'Pages') { 
     $this->loadComponent('Auth', [ 
       'loginAction' => [ 
        'controller' => 'Access', 
        'action' => 'admin_login', 
        'plugin' => 'Access' 
       ], 
       'loginRedirect' => [ 
        'controller' => 'Access', 
        'action' => 'admin_index', 
        'plugin' => 'Access' 
       ], 
       'authenticate' => [ 
        'Form' => [ 
        'userModel' => 'your-admin-database-table' 
       ] 
      ] 
      ]); 
    } 
} 

In PagesController dann müssen Sie die folgenden Schritte aus:

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

loginaction - ist für Admin-Login verwendet. loginRedirect - ist der Ort, an dem die Benutzer nach der Anmeldung landen. authenticate - wird verwendet, um die Formulardetails wie Datenbankname und Felder zu definieren.

Eine sehr ausführliche Dokumentation finden Sie hier: https://book.cakephp.org/3.0/en/controllers/components/authentication.html

Edit: Bitte beachten Sie, dass der Code