Empfehlungen: Erweiterte Suche

Session->setFlash kommt zu spät

Ausgabedaten formatieren und darstellen

Session->setFlash kommt zu spät

Beitragvon Luckie » Di 27. Okt 2009, 16:05

Folgender Code wird immer aufgerufen, bevor eine Aktion ausgeführt wird, um die Berechtigung zu prüfen:
Code: Alles auswählen
if(isset($allowedActions[low($this->name)]))
        {          
            $controllerActions = $allowedActions[low($this->name)];                    
            foreach ($user['Group'] as $group => $value)
            {              
                if(isset($controllerActions[low($this->action)]) && in_array($value['id'], $controllerActions[$this->action]))
                {                          
                    return true;
                }              
            }              
        }          
        $this->Session->setFlash(__('Keine Berechtigung', true), 'default', array(), 'error');         
        $this->redirect("index");      
        return false;  

Da brauchen wir nicht zu diskutieren, das funktioniert wie gewünscht.

Nur gibt es ein Problem: Ruft der Benutzer eine Aktion auf zu der er nicht berechtigt ist, erfolgt der Redirect, das ist OK, aber die Nachricht wird nicht ausgegeben. Sie wird erst beim zweiten Versuch ausgegeben. Und umgekehrt, wenn man dann eine erlaubte Aktion durchführt, wird die Nachricht trotzdem angezeigt und ist auch wieder beim zweiten mal weg.

Kann mir jemand sagen, was da noch falsch läuft?
Luckie
 
Beiträge: 115
Registriert: Fr 22. Mai 2009, 12:16
OS: Windows XP

Re: Session->setFlash kommt zu spät

Beitragvon Luckie » Mo 2. Nov 2009, 10:00

So, Montag morgen und ich sitze immer noch vor dem Problem, leider hat es sich über den Rest der Woche nicht von selbst gelöst. Hat irgendjemand eine Idee woran das liegen könnte, dass die Meldung immer einen Klick zu spät kommt bzw. verschwindet und wie man das lösen könnte.
Luckie
 
Beiträge: 115
Registriert: Fr 22. Mai 2009, 12:16
OS: Windows XP

Re: Session->setFlash kommt zu spät

Beitragvon Mathias » Mo 2. Nov 2009, 15:49

vielleicht ein bisschen trial'n'error. Schon mal ohne return false probiert? Oder ein exit nach dem redirect?
cheers
Benutzeravatar
Mathias
 
Beiträge: 225
Registriert: Mi 4. Jun 2008, 22:30
Wohnort: Berlin
CakePHP-Version: 1.3.x
OS: OS X 10.6.x

Re: Session->setFlash kommt zu spät

Beitragvon Luckie » Mo 2. Nov 2009, 15:58

Jupp, alles schon probiert. Ich habe auch schon probiert den redirect raus zulassen.
Luckie
 
Beiträge: 115
Registriert: Fr 22. Mai 2009, 12:16
OS: Windows XP

Re: Session->setFlash kommt zu spät

Beitragvon Luckie » Di 3. Nov 2009, 14:02

Hat sonst noch jemand eine Idee woran es liegen könnte?
Luckie
 
Beiträge: 115
Registriert: Fr 22. Mai 2009, 12:16
OS: Windows XP

Re: Session->setFlash kommt zu spät

Beitragvon Luckie » Mo 9. Nov 2009, 11:54

Noch irgendjemand eine Idee woran das liegen könnte?
Luckie
 
Beiträge: 115
Registriert: Fr 22. Mai 2009, 12:16
OS: Windows XP

Re: Session->setFlash kommt zu spät

Beitragvon Mathias » Mo 9. Nov 2009, 21:16

Du hast wirklich alles ausprobiert?
Wie sieht denn deine komplette Funktion aus? Und der Funktionsaufruf?
Hast du dir mal die flash messages an unterschiedlichen Punkten ausgeben lassen?
Hast du es mal mit einer simplen Funktion probiert?
cheers
Benutzeravatar
Mathias
 
Beiträge: 225
Registriert: Mi 4. Jun 2008, 22:30
Wohnort: Berlin
CakePHP-Version: 1.3.x
OS: OS X 10.6.x

Re: Session->setFlash kommt zu spät

Beitragvon Luckie » Di 10. Nov 2009, 10:44

Also komplett sieht es so aus:
Code: Alles auswählen
function isAuthorized()
    {
        // Legt fest welche Controller Actions fuer alle ausfuehrbar sind
        $freeActions = array(
            'anreden'=>array('admin_login', 'admin_logout', 'admin_index', ),
            'benutzeraccountstatus'=>array('admin_login', 'admin_logout', 'admin_index', ),
            'benutzeraccounts'=>array('admin_login', 'admin_logout', 'admin_index', )          
        );
               
        // Welche Gruppe darf welche Aktionen ausfuehren
        $allowedActions = array(
            'anreden' => array(
                'admin_index' => array(1),
                'admin_paging' => array(1),
                'admin_view' => array(1),
                'admin_edit' => array(1),      
                'admin_add' => array(1),
                'admin_delete' => array(1),
                'admin_hard_delete' => array(1),
                'admin_undelete' => array(1),  
                'admin_form' => array(1)
            ), 
            'benutzeraccountstatus' => array(
                'admin_index' => array(1),
                'admin_paging' => array(1),
                'admin_view' => array(1),
                'admin_edit' => array(1),      
                'admin_add' => array(1),
                'admin_delete' => array(1),
                'admin_hard_delete' => array(1),   
                'admin_undelete' => array(1),
                'admin_form' => array(1)
            ), 
            'benutzeraccounts' => array(
                'admin_index' => array(1),
                'admin_paging' => array(1),
                'admin_view' => array(1),
                'admin_edit' => array(1),      
                'admin_add' => array(1),
                'admin_delete' => array(1),
                'admin_hard_delete' => array(1),
                'admin_undelete' => array(1),
                'admin_form' => array(1)
            )
        );
   
        App::import('Model', 'User');
        $thisUser = new User;
        $authUser = $this->Auth->user();
        $user = $thisUser->findById($authUser['User']['id']);
       
        $freeAction = $freeActions[low($this->name)];  
        if(isset($freeAction) && in_array(low($this->action),$freeAction))
        {      
            return true;
        }
                       
        if(isset($allowedActions[low($this->name)]))
        {          
            $controllerActions = $allowedActions[low($this->name)];                    
            foreach ($user['Group'] as $group => $value)
            {              
                if(isset($controllerActions[low($this->action)]) && in_array($value['id'], $controllerActions[$this->action]))
                {                          
                    return true;
                }              
            }              
        }          
        $this->Session->setFlash(__('Keine Berechtigung', true), 'default', array(), 'error');             
        $this->redirect("index");          
        return false;                  
    }
Luckie
 
Beiträge: 115
Registriert: Fr 22. Mai 2009, 12:16
OS: Windows XP


Zurück zu Views

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste