2010-05-08 2 views
9

Ich habe eine "Posts" und eine "Benutzer" -Controller. Ich benutze die Auth-Komponente und möchte, dass alle Benutzer "Post.index" besuchen können, aber nur eingeloggte Benutzer können "User.index" besuchen.CakePHP Auth, wie bestimmte Controller und Aktionen zu ermöglichen

In meinem app_controller.php Ich habe dieses

$this->Auth->allow('signup', 'confirm', 'index'); 

aber mit, dass alle Benutzer können post.index und user.index besuchen. Wie kann ich einen Controller in der allow-Methode angeben?

Das hat bei mir nicht funktioniert:

$this->Auth->allow('signup', 'confirm', 'Post.index'); 

Update I 'Index' aus dem app_controller.php entfernt und stattdessen in der before Methode in dem Post-Controller:

function beforeFilter() 
{ 
    parent::beforeFilter(); 
    $this->Auth->allow('index'); 
} 

Ich habe auch eine Variable "angemeldet" in app_controller, ohne "parent :: beforeFilter();" Ich habe eine "undefined variable" Benachrichtigung erhalten.

thx sibidiba

Antwort

13

Die Zeit wird nicht funktionieren. Sie könnten stattdessen '/' versuchen. Wenn dies ebenfalls fehlschlägt, sollten Sie $this->Auth->allow('index') in PostController's und UserControllers ::beforeFilter() einzeln einstellen. Vergessen Sie nicht, parent :: beforeFilter() aufzurufen.

+3

Perfekte Antwort! Es funktionierte nicht mit '/' entfernt, so I 'Index' aus dem app_controller und erlaubt es in der Post-Controller: Funktion before() { \t parent :: before(); \t $ this-> Auth-> allow ('index'); } –

1

Ich benutze CakePHP 2.x. Der Schrägstrich funktioniert nicht.

Wenn Sie den Benutzerzugriff „myController.myAction“ ohne Anmeldung zulassen möchten, sollten Sie hinzufügen before() in myController.php statt AppController.php

Hier ist der Code in myController.php hinzuzufügen:

function beforeFilter() { 
    parent::beforeFilter(); 
    $this->Auth->allow('myAction'); 
} 
1

Hängt von der Version ab, an der Sie gerade arbeiten. Wenn es CakePHP 2.x ist, lege diesen Code in den Controller, der die Aktion hat, die du ohne Login zulassen willst. Da Ihre Frage, sollten Sie diesen Code setzen Controller Beiträge:

function beforeFilter(){ 
    $this->Auth->allow(array('index','another action'));} 

allow(array('acction you want to allow')) statt allow('acction you want to allow')

0

$ this-> name Strom-Controller angefordert zurückgibt.

versuchen, dies in AppController :: before()

public function beforeFilter() 
{ 

    // ... Basic configs 

    switch ($this->name) { 
     case 'Posts': 
      $this->Auth->allow('add'); 
      break;    
     case 'Test': 
      $this->Auth->allow('test'); 
      break; 
    } 
} 

Sorry, mein Englisch

1

Für CakePHP 2.x nicht gut ist, gibt es mehrere Methoden (je nach CakePHP-Version).

Aus der Dokumentation (http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html):

// Allow all actions. CakePHP 2.0 
$this->Auth->allow('*'); 

// Allow all actions. CakePHP 2.1 
$this->Auth->allow(); 

// Allow only the view and index actions. 
$this->Auth->allow('view', 'index'); 

// Allow only the view and index actions. 
$this->Auth->allow(array('view', 'index')); 
0

In Kuchen 3.x Sie Sie können die folgenden Codezeilen verwenden, um alle Aktionen zuzulassen.

public function beforeFilter(Event $event) { 
     parent::beforeFilter($event); 
     $this->Auth->allow(); 
    }