ACL: auf user und group des eingeloggten Users zugreifen

Daten auslesen, verarbeiten und den Views übergeben

ACL: auf user und group des eingeloggten Users zugreifen

Beitragvon Molekül am Sa 17. Okt 2009, 10:34

Hallo,

ich verwende ACL zur Zugriffskontrolle auf verschiedene actions. Meine AppController Klasse sieht so aus:
Code: Alles auswählen
<?php
class AppController extends Controller {
    var $components = array('Acl','Auth');
    public function beforeFilter(){
        if(isset($this->Auth)){
            parent::beforeFilter();
            $this->Auth->allowedActions = array('index', 'view');
            $this->Auth->authorize = 'actions';
        }
    }
}
?>


Nun würde ich gerne neben all dem was Cakephp automatisch tut zur Laufzeit auf den Usernamen und die Gruppe des aktuell eingeloggten User zugreifen. Aus zwei Gründen:
- in index und view möchte ich gerne per id filtern ob alle Felder der Datenbank oder nur Teile sichtbar sind
- bei add/edit möchte ich den Usernamen speichern der add/edit vorgenommen hat
- auf der Seite möchte ich den aktuellen Usernamen neben den Links zu logout/login anzeigen.

Ich gehe vermute, dass cakephp mir diese Informationen schon in irgendeiner Variablen zur Verfügung stellt.

Wie komme ich also an die Information heran? Googlen und herumprobieren hat mich nicht weiter gebracht.

Danke!
Molekül
 
Beiträge: 24
Registriert: Fr 25. Sep 2009, 09:45

Re: ACL: auf user und group des eingeloggten Users zugreifen

Beitragvon dth33 am So 18. Okt 2009, 21:34

Hi,

in index und view möchte ich gerne per id filtern ob alle Felder der Datenbank oder nur Teile sichtbar sind


Das musst Du mir näher erklären.

bei add/edit möchte ich den Usernamen speichern der add/edit vorgenommen hat


Das geht über das whoDidIt-Behavior.
auf der Seite möchte ich den aktuellen Usernamen neben den Links zu logout/login anzeigen


Code: Alles auswählen
 
 //app_controller.php
 function beforeFilter() {
        // ...........
        $this->User->contain('Group');
        if ($this->Auth->User('id') != false) {
            $this->set('loggedIn', true);
            $this->set('auth', $this->User->read(null, $this->Auth->User('id')));
        }
    }
 



Code: Alles auswählen
     
// default.ctp        
<?php if (isset($loggedIn)) {
                      echo $html->image('icons/user.png').' Ihr Benutzername: '.$auth['User']['username'].'<br>';
                      echo $html->image('icons/group.png').' Ihre Benutzergruppe: '.$auth['Group']['name'].'<br>';
                      echo $html->link($html->image('icons/door.png').' Logout', array('controller' => 'users', 'action'=>'logout'), array('escape' => false));
                    }
              ?>
 


Grüße Steffen
dth33
 
Beiträge: 33
Registriert: Do 22. Jan 2009, 15:38
Wohnort: Am schönen Niederrhein
CakePHP-Version: 1.3
OS: Win32

Re: ACL: auf user und group des eingeloggten Users zugreifen

Beitragvon Molekül am Mo 19. Okt 2009, 10:10

Hallo,
danke für die Antwort!
Dein Code funktioniert wunderbar, Username und Gruppe werden angezeigt :-) (für die Suchfunktion: uses=array('User') war noch nötig)
Das whoDidIt-Behavior werde ich mir in den nächsten Tagen in Ruhe ansehen.

dth33 hat geschrieben:
in index und view möchte ich gerne per id filtern ob alle Felder der Datenbank oder nur Teile sichtbar sind

Das musst Du mir näher erklären.

Ich habe öffentliche und nicht öffentliche Datensätze. Für nicht eingeloggte User oder User der falschen Gruppe sollen nicht öffentliche Datensätze nur teilweise angezeigt werden, der Relevante Teil soll durch ein (c) Zeichen ersetzt werden. Mir erscheint es am sinnvollsten das durch einen Filter im Controller oder vielleicht sogar eher view umsetzten. Vermutlich reicht das, was du mir bisher geschrieben hast sogar schon aus.

Grüße
Molekül
 
Beiträge: 24
Registriert: Fr 25. Sep 2009, 09:45

Re: ACL: auf user und group des eingeloggten Users zugreifen

Beitragvon Molekül am So 7. Feb 2010, 12:34

Hallo Steffen (nehme natürlich auch von anderen Personen gerne Antworten entgegen!)
dth33 hat geschrieben:
Code: Alles auswählen
 
 //app_controller.php
 function beforeFilter() {
        // ...........
        $this->User->contain('Group');
        if ($this->Auth->User('id') != false) {
            $this->set('loggedIn', true);
            $this->set('auth', $this->User->read(null, $this->Auth->User('id')));
        }
    }
 

Ich setzte im app_controller die Variabel auth auf die ich dann in jedem view zugreifen kann. Genauso könnte ich $this->auth definieren, so dass ich auf diese Variable in jedem beliebigen Controller zugreifen kann.

Jetzt möchte aber einige Logik in ein behaviour auslagern, d.h. ich muss im Model, bzw eher im Behaviour auf die Usergroup zugreifen. Da funktioniert obiger Code nicht, weil ich es nicht schaffe auf $this->Auth oder $this->User zuzugreifen (ja, ich mache vermutlich sehr fundamentale Fehler, aber ich hab nun schon das Oreilly-Buch und das cookbook überflogen und sehe den Wald vor lauter Bäumen nicht).

Grüße, M.
Molekül
 
Beiträge: 24
Registriert: Fr 25. Sep 2009, 09:45

Re: ACL: auf user und group des eingeloggten Users zugreifen

Beitragvon dth33 am So 7. Feb 2010, 19:54

Hallo,

wie das funktioniert zeigt doch das who_did_it Behavior.

http://bakery.cakephp.org/articles/view/whodidit-behavior-automagic-created_by-and-modified_by-fields

Ansonsten empfehle ich noch das eBook von Matt Curry

http://www.pseudocoder.com/free-cakephp-book/

Dort insbesondere die Abschnitte: "Getting the Logged In User from Anywhere" und "Automatically Tracking Created/Modified By"

Grüße Steffen
dth33
 
Beiträge: 33
Registriert: Do 22. Jan 2009, 15:38
Wohnort: Am schönen Niederrhein
CakePHP-Version: 1.3
OS: Win32

Re: ACL: auf user und group des eingeloggten Users zugreifen

Beitragvon Molekül am So 14. Feb 2010, 12:12

Hallo Steffen,
dth33 hat geschrieben:wie das funktioniert zeigt doch das who_did_it Behavior

danke - da hätte ich selbst drauf kommen sollen bevor ich die Frage stelle. :oops:
Es funktioniert.

dth33 hat geschrieben:Ansonsten empfehle ich noch das eBook von Matt Curry

Vielen Dank für den Tipp! Ich bin am lesen :-)

Grüße, M.
Molekül
 
Beiträge: 24
Registriert: Fr 25. Sep 2009, 09:45


Zurück zu Controller

Wer ist online?

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

cron