php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 5,00 durchschnittlich.
Alt 22.05.2011, 11:16  
Benutzer
 
Registriert seit: 03.03.2010
Beiträge: 38
PHP-Kenntnisse:
Anfänger
Enigma228 ist zur Zeit noch ein unbeschriebenes Blatt
Standard [Erledigt] Zend_Acl etwas spezieller

Hallo Leute ich habe ein Problem das die Autorisation ignoriert wird
Wenn ich es richtig verstanden habe muss ich doch die Resource(GuestbookController) mit einem Interface ausstatten und auch den User..
Das habe ich auch getan..
Ich vermute mal, das er im Plugin die Ressource nicht richtig erkennt und dadurch immer null setzt, was heisst jede Userart erlaubt ..
Ich habe keine Module definiert, sollte also im Modul 'default' sein..
Das Plugin habe ich aus einem Tutorial und kann jetzt so ziemlich alles Nachvollziehen..
Allerdings weiss ich nicht, was ich verkehrt mache???
Hat jemand eine Idee???


Ich habe einen GuestbookController mit dem Interface Zend_Acl_Resource_Interface
PHP-Code:
class GuestbookController extends Zend_Controller_Action implements Zend_Acl_Resource_Interface
{

    public function 
getResourceId()
    {
        return 
'user_area';
    }
    
    public function 
init()
    {
        
/* Initialize action controller here */
    
}

    public function 
indexAction()
    {
        
    }

und ein Model User mit dem Interface Zend_Acl_Role_Interface
PHP-Code:
class Application_Model_User implements Zend_Acl_Role_Interface
{
    private 
$_id;
    private 
$_username;
    private 
$_pass;
    private 
$_email;
    private 
$_lastlogin;
    private 
$_firstlogin;
    private 
$_role;
    protected 
$_aclRoleId null;
    
    public function 
__construct(array $options null)
    {
        if (
is_array($options)) {
            
$this->setOptions($options);
        }
    }
 
    public function 
getRoleId()
    {
        if (
$this->_role == null) {
            return 
'guest';
        }else{
            return 
$this->getRole();
        }
    }
    
    public function 
__set($name$value)
    {
        
$method 'set' $name;
        if ((
'mapper' == $name) || !method_exists($this$method)) {
            throw new 
Exception('Ungültige User Eigenschaft');
        }
        
$this->$method($value);
    }

    public function 
getId()
    {
        return 
$this->_id;
    }
    public function 
setId($id)
    {
        
$this->_id $id;
    }
    
    public function 
getUsername()
    {
        return 
$this->_username;
    }
    public function 
setUsername($username)
    {
        
$this->_username $username;
    }
    
    public function 
getPass()
    {
        return 
$this->_pass;
    }
    public function 
setPass($pass)
    {
        
$this->_pass $pass;
    }
    
    public function 
getEmail()
    {
        return 
$this->_email;
    }
    public function 
setEmail($email)
    {
        
$this->_email $email;
    }
    
    public function 
getLastlogin()
    {
        return 
$this->_lastlogin;
    }
    public function 
setLastlogin($lastlogin)
    {
        
$this->_lastlogin $lastlogin;
    }
    
    public function 
getFirstlogin()
    {
        return 
$this->_firstlogin;
    }
    public function 
setFirstlogin($firstlogin)
    {
        
$this->_firstlogin $firstlogin;
    }
    
    public function 
getRole()
    {
        return 
$this->_role;
    }
    public function 
setRole($role)
    {
        
$this->_role $role;
    }

Das ganze wird über ein Plugin geprüft
PHP-Code:
class Plugin_Auth_AccessControl extends Zend_Controller_Plugin_Abstract
{
    public function 
__construct(Zend_Auth $authZend_Acl $acl)
    {
          
$this->_auth $auth;
          
$this->_acl  $acl;
    }
    
    public function 
routeStartup(Zend_Controller_Request_Abstract $request)
    {
        
        
$message "Posts: User: ".$this->getRequest()->getParam('username');
        if (!
$this->_auth->hasIdentity() && null !== $request->getPost('username') && 
                  
null !== $request->getPost('pass')) {
              echo 
"Daten sind gesendet!!";
                      
// POST-Daten bereinigen
            
$filter = new Zend_Filter_StripTags();
            
$username $filter->filter($request->getPost('username'));
            
$password $filter->filter($request->getPost('pass'));
            if (empty(
$username)) {
                
$message 'Bitte Benutzernamen angeben.';
            }
            elseif (empty(
$password)) {
                
$message 'Bitte Passwort angeben.';
            }
            else
            {
                  
$authAdapter = new Plugin_Auth_AuthAdapter();
                  
$authAdapter->setIdentity($username);
                  
$authAdapter->setCredential($password);
                  
$result $this->_auth->authenticate($authAdapter);
                  if (!
$result->isValid()) {
                    
$messages $result->getMessages();
                    
$message $messages[0];
                  } else {
                    
$storage $this->_auth->getStorage();
                    
// die gesamte Tabellenzeile in der Session speichern,
                    // wobei das Passwort unterdrückt wird
                    
$storage->write($authAdapter->getResultRowObject(null'pass'));
                  }
    
                  
//$registry = Zend_Registry::getInstance();
                  //$view = $registry->view;
            
}
    
            if (isset(
$message)) {
                  
$view->message $message;
            }
            
          }
    }
    
    public function 
preDispatch(Zend_Controller_Request_Abstract $request)
    {
        if (
$this->_auth->hasIdentity() &&is_object($this->_auth->getIdentity())) {
            
var_dump($this->_auth->getIdentity());
            
$role $this->_auth->getIdentity()->role;
            echo 
"...Treffer: ".$role;
          } else {
              
$role 'guest';
            echo 
"...kein Treffer: ".$role."... ";
          }   
        
          
$module $request->getModuleName(); // Hier vermute ich geht der Fehler los
          
var_dump($module);
          
// Ressource == Modul -> kann hier geändert werden!
                // Wie kann ich denn die Resource abfragen und nicht das modul??
          
$resource $module;
          if (!
$this->_acl->has($resource)) {
              echo 
"keine Gesperrte Resource...  ";
            
$resource null;
          }
          echo 
"Role: ".$role." + Resource: ".$resource;
          if (!
$this->_acl->isAllowed($role$resource)) {
            if (
$this->_auth->hasIdentity()) {
                echo 
"Wieder ein Treffer";
                  
// angemeldet, aber keine Rechte -> Fehler!
                  
$request->setModuleName('default');
                  
$request->setControllerName('error');
                  
$request->setActionName('noAccess');
            } else {
                echo 
"Wieder kein Treffer";
                  
//nicht angemeldet -> Login
                  
$request->setModuleName('default');
                  
$request->setControllerName('user');
                  
$request->setActionName('login');
            }
          }
    }

Welcher seine Werte aus hieraus nimmt..
PHP-Code:
class Plugin_Auth_Acl extends Zend_Acl
{
    public function 
__construct()
    {
        
// RESSOURCES
            
$this->add(new Zend_Acl_Resource('admin'));
            
$this->add(new Zend_Acl_Resource('user_area'));
    
           
$this->addRole(new Zend_Acl_Role('guest'));
           
$this->addRole(new Zend_Acl_Role('user'), 'guest');
           
$this->addRole(new Zend_Acl_Role('admin'), 'user');
    
           
$this->allow(nullnull);
           
$this->deny('guest''user_area');
           
$this->deny('guest''admin');
           
$this->allow('user','user_area');
           
$this->allow('admin''admin');
    }


Geändert von Enigma228 (22.05.2011 um 15:30 Uhr).
Enigma228 ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
spezieller Countdown bimbo56 Scriptbörse 13 05.08.2010 20:17
[Erledigt] Spezieller Zähler ?! meinereiner Beitragsarchiv 10 23.11.2009 17:54
[Erledigt] Regulärer Ausdruck mit spezieller Negation? Anotherone PHP Tipps 2008 3 08.10.2008 11:02
JS: Spezieller Image Hover GSJLink HTML, Usability und Barrierefreiheit 7 18.06.2007 17:24
Count() mit spezieller Abfrage... Matthiasnet Datenbanken 7 11.06.2007 16:55
Bestimmte Links in spezieller Farbe? BartTheDevil89 HTML, Usability und Barrierefreiheit 3 11.07.2005 21:42

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
zend_acl, zend_acl::getrole(), plugin_auth_authadapter

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:54 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum