Empfehlungen: Erweiterte Suche

Anfänger - Auth->user hilfe

Klassen zur Datenverarbeitung in den Controllern (DRY)

Anfänger - Auth->user hilfe

Beitragvon chefe » Fr 6. Jan 2012, 13:43

Hallo zusammen,

ich bin noch relativ neu und unerfahren wenn es um CakePHP geht, jedoch geht es täglich bergauf... ;-)

Ich habe mir zum Üben mit Cake ein Projekt ausgedacht, ein ER-Modell erstellt, alle Models über die Console angelegt und bin gerade beim USER-ANLEGEN. Bestimmte Zusatzfelder sollen aber nur vom ADMIN angelegt werden können. Deshalb habe ich im views/user/add.ctp auch eine IF-Abfrage gemacht if($admin):
Code: Alles auswählen
<?php
        echo $this->Form->input('username');
        echo $this->Form->input('prename');
        echo $this->Form->input('surname');
        echo $this->Form->input('email');
        echo $this->Form->input('birthday');
        echo $this->Form->input('password');
                echo $this->Form->input('password_confirmation',array('type' => 'password'));
                if($admin):
                    echo $this->Form->input('active');
                    echo $this->Form->input('deleted');
                    echo $this->Form->input('Right');
                endif;
       
    ?>



Ich habe eine Datei im app Ordner angelegt names app_controller.php:
Code: Alles auswählen

<?php

class AppController extends Controller {
    var $components = array('Auth', 'Session');
   
    function beforeFilter(){
        $this->Auth->allow('index','view');
        $this->Auth->authError= 'Sie müssen eingeloggt sein um die Seite zu sehen.';
        $this->Auth->loginError = 'Username/Passwort falsch.';
        $this->Auth->loginRedirect = array('controller' => 'users', 'action' => 'view');
        $this->set('admin',$this->_isAdmin());
    }
   
    function _isAdmin(){
        $admin = FALSE;
        if($this->Auth->user()):
           
        endif;
        return $admin;
    }
}
?>
 


Mein ER-Modell für den User sieht folgendermaßen aus.
Bild



Bei mir kann ein USER mehrere ROLLEN haben... Sprich ein Admin darf zwar alles, aber es gibt unterschiedliche Moderatoren-Gruppen, die nur bestimmte Dinge erledigen dürfen, bzw. durch eine weitere Rolle, Ihren Administrationsaufwand in einen anderen Bereich erweitern dürfen....

Sodala... hier gehts los:
Hätte ich in meiner Datenbank, die Rolle direkt in der users-Tabelle, würde ich die oben aufgeführte IF-Anweisung wie folgt schreiben:
Code: Alles auswählen
 if($this->Auth->user('rolle') == 'moderatorX'):


Da ich jetzt aber die Rollen und die User in der users_rights-Tabelle habe, komm ich nciht mehr weiter und weiß nicht wie ich nun in der _isAdmin im app_controller.php auf die Rolle komme ?

Ich hoffe ich konnte das Problem verdeutlichen und würde mich freuen wenn mir einer helfen könnte... ;- )
Danke im Voraus
chefe
 
Beiträge: 2
Registriert: Fr 6. Jan 2012, 13:13

Re: Anfänger - Auth->user hilfe

Beitragvon euromark » Fr 6. Jan 2012, 14:05

erstmal ein paar wichtige dinge vorab (die mir gleich mal aufgefallen sind *g*)

- bitte immer angeben welche cake version du verwendest am anfang einer frage
- solche dinge sollten in beforeRender() an den view gegeben werden (nicht in beforeFilter)
- password sollte im formular nicht "password heißen" => http://www.dereuromark.de/2011/08/25/wo ... n-cakephp/
- feldnamen, coding und comments 100% in englisch (sieht sonst ziemlich hässlich aus und sorgt für probleme später - z.b. dein db feld "passwort")
- das password sollte unbedingt nur als hash abgelegt werden (niemals, niemals, niemals plain), deswegen reicht "password" und "password_hash" ist überflüssig
euromark
 
Beiträge: 642
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.x
OS: Windows

Re: Anfänger - Auth->user hilfe

Beitragvon chefe » Fr 6. Jan 2012, 14:46

Hi EuroMark,

danke erstmal für deine konstruktive Antwort... ;-)

- Ich habe Cake 1.3.14

- solche dinge sollten in beforeRender() an den view gegeben werden (nicht in beforeFilter)

- Ich hab neben mir das "Webentwicklung mit CakePHP" Buch liegen und da wird das in der beforeFilter gemacht ... :-( Ajajaj... das verwirrt mich jetzt noch mehr... :-D
- password sollte im formular nicht "password heißen" => http://www.dereuromark.de/2011/08/25/wo ... n-cakephp/

- Ok, das hab ich verstanden.. ;-)
- feldnamen, coding und comments 100% in englisch (sieht sonst ziemlich hässlich aus und sorgt für probleme später - z.b. dein db feld "passwort")

- In der DB steht schon password. Da ich das ER-Modell mit DBDesigner gemacht hab, musst ich statt PASSWORD -> PASSWORT eintragen, da der DBDesigner das irgendwie nicht checkt... ;-)
- das password sollte unbedingt nur als hash abgelegt werden (niemals, niemals, niemals plain), deswegen reicht "password" und "password_hash" ist überflüssig

- Das Passwort soll auch md5 kodiert gespeichert werden in der Spalte PASSWORD. Die Spalte password_hash dient nur zur Email- bzw. User-Aktivierung wenn er den Link in der Email klickt... ;-)


Ja aber wenn ich das nun in die beforeRender setze... wie kann ich jetzt in der _isAdmin-Funktion die passende IF-Abfrage kreieren? :ugeek:
chefe
 
Beiträge: 2
Registriert: Fr 6. Jan 2012, 13:13

Re: Anfänger - Auth->user hilfe

Beitragvon euromark » Fr 6. Jan 2012, 21:11

ah ok^^
naja, auch autoren irren sich mal. ich persönlich bezeichne es als schlichtweg falsch, andere würden unter umständen das mit beiden augen zugedrückt durchgehen lassen.
in jedem fall ist beforeRender() der richtige ansatz :)

md5 ist veraltet, eigentlich verwendet man - ist auch cake standard - sha1 oder höher inzwischen.

verstehe :) dafür also das hash feld.
ich verwende dafür ne eigene tabelle mit "code keys", da es verschiedenste szenarien gibt, wo man solche keys braucht (newsletter, email aktivierung, pw vergessen function, ...)

bzgl deiner abfrage:
Code: Alles auswählen

if ($this->Session->check('Auth.User.id'))
 

tuts auch :)
soweit alles richtig.
für die rechte musst du halt aus dieser zwischentabelle rausziehen, ob die person das recht hat.
idealerweise wird das eigentlich bereits beim Login gemacht und in der session gespeichert, so dass man sich den andauernden lookup spart.
Allerdings jetzt für den anfang sicher nicht ganz so trivial.

gibts eigentlich nen grund nich direkt 2.0 zu verwenden?
da ist das sauber gelöst und man kann sehr einfach seine eigenen methoden und klassen benutzen.
euromark
 
Beiträge: 642
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.x
OS: Windows


Zurück zu Components

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast