Advertisement
Guest User

Untitled

a guest
May 13th, 2017
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 6.59 KB | None | 0 0
  1. <?php
  2. class Application_Plugin_Auth_AccessControl extends Zend_Controller_Plugin_Abstract
  3. {
  4.     /**
  5.      * Zend_Auth-Object
  6.      * @var Zend_Auth
  7.      */
  8.     protected $_Auth;
  9.    
  10.     /**
  11.      * The Acl-Object
  12.      * @var Application_Plugin_Auth_Acl
  13.      */
  14.     protected $_Acl;
  15.    
  16.     /**
  17.      * Failure-Message
  18.      * @todo Delegate the Message to View
  19.      * @var string
  20.      */
  21.     protected $_FailureMessage = null;
  22.    
  23.     public function __construct( Zend_Auth $Auth ){
  24.         $this->_Auth = $Auth;
  25.     }
  26.    
  27.     /**
  28.      * Login-Check
  29.      */
  30.     public function routeShutdown(Zend_Controller_Request_Abstract $request)
  31.     {
  32.         $Username = $request->getPost('username');
  33.         $Password = $request->getPost('password');
  34.         $Security = $request->getPost('security');
  35.        
  36.         $SecurityAuthPlugin = Application_Plugin_Auth_Security::getInstance();
  37.        
  38.         if ( null !== $Username && null !== $Password && null !== $Security ){
  39.             // POST-Daten bereinigen
  40.             $filter = new Zend_Filter_StripTags();
  41.             $Username = $filter->filter($Username);
  42.             $Password = $filter->filter($Password);
  43.            
  44.             $SecurityHash = $SecurityAuthPlugin->getSecurityHash();
  45.             $SecurityAuthPlugin->generateSecurityHash();
  46.            
  47.             if ( empty($Username) ){
  48.                 $message = 'LOGIN_EMPTY_USERNAME';
  49.             }else if ( empty($Password) ){
  50.                 $message = 'LOGIN_EMPTY_PASSWORD';
  51.             }else if( empty($Security) ){
  52.                 $message = 'LOGIN_EMPTY_SECURITY_HASH';
  53.             }else if( $SecurityHash != $Security ){
  54.                 $message = 'LOGIN_WRONG_SECURITY_HASH';
  55.             } else {
  56.                 if( !$this->authUser( $Username, $Password ) ){
  57.                     $this->authUser( 'anonymous', 'guest' );
  58.                 }
  59.             }
  60.           }else if( !$this->_Auth->hasIdentity() ){
  61.               $this->authUser( 'anonymous', 'guest' );
  62.               $SecurityAuthPlugin->generateSecurityHash();
  63.           }
  64.          
  65.           // For the Login-Form
  66.           Zend_Layout::getMvcInstance()->getView()->security_hash = $SecurityAuthPlugin->getSecurityHash();
  67.     }
  68.    
  69.     /**
  70.      * Check allowed
  71.      */
  72.     public function preDispatch(Zend_Controller_Request_Abstract $request)
  73.     {
  74.         // No identity? No Page!
  75.         if( !$this->_Auth->hasIdentity() ){
  76.             // No Identity
  77.             $request->setModuleName('default');
  78.             $request->setControllerName('error');
  79.             $request->setActionName('missing-identity');
  80.         }
  81.        
  82.         // Get Identity and Role
  83.         $Identity     = $this->_Auth->getIdentity();
  84.         $role        = $Identity->getRole();
  85.        
  86.         // Create reqeusted Resource
  87.         $module     = $request->getModuleName();
  88.         $controller = $request->getControllerName();
  89.         $action        = $request->getActionName();
  90.        
  91.         $resource   = array(
  92.             'module'        => $module,
  93.             'controller'    => $controller,
  94.             'action'        => $action
  95.         );
  96.        
  97.         // Privilege from Http-Method
  98.         $privilege    = $request->getMethod();
  99.        
  100.         try {
  101.             $this->_Acl  = new Application_Plugin_Auth_Acl(
  102.                 $resource,
  103.                 $role
  104.             );
  105.         }catch( Zend_Acl_Exception $zae ){
  106.             /**
  107.              * @todo Print the Error to the Page
  108.              */
  109.             $request->setModuleName('default');
  110.             $request->setControllerName('error');
  111.             $request->setActionName('unregistered-ressource');
  112.            
  113.             return;
  114.         }
  115.        
  116.         // If there's no Resource, redirect
  117.         if ( !$this->_Acl->has( implode(".",$resource) ) ) {
  118.             // Resource not registered!
  119.             $request->setModuleName('default');
  120.             $request->setControllerName('error');
  121.             $request->setActionName('unregistered-ressource');
  122.         }else if ( !$this->_Acl->isAllowed($role, implode(".",$resource), $privilege) ) {
  123.             // No Rights!
  124.             $request->setModuleName('default');
  125.             $request->setControllerName('error');
  126.             $request->setActionName('noaccess');
  127.         }
  128.     }
  129.    
  130.     /**
  131.      * Set LoginError
  132.      * @param $Msg
  133.      * @return void
  134.      */
  135.     protected function setFailureMessage( $Msg ){ $this->_FailureMessage = $Msg; }
  136.    
  137.     /**
  138.      * User Auth
  139.      * @param $Username
  140.      * @param $Password
  141.      * @return boolean
  142.      */
  143.     public function authUser( $Username, $Password ){
  144.         // Plugin-Adaper
  145.         $authAdapter = new Application_Plugin_Auth_Adapter();
  146.         $authAdapter->setIdentity( $Username );
  147.         $authAdapter->setCredential( $Password );
  148.        
  149.         // Result
  150.         $AuthResult = $this->_Auth->authenticate( &$authAdapter );
  151.                
  152.         if( !$AuthResult->isValid() ){
  153.             // if setted, return
  154.             if( !is_null($this->_FailureMessage) ) return false;
  155.            
  156.             // if no Message set, also no misstake, set Message
  157.             $this->setFailureMessage( $this->getTranslateableMessage( $AuthResult ) );
  158.            
  159.             return false;
  160.         }else{
  161.             $Identity = $authAdapter->getResultRowObject(null, 'password');
  162.            
  163.             $UserModel = new Codejumper_Resource_User_Model( (array) $Identity );
  164.             // Save UserModel as Identity
  165.             $storage = $this->_Auth->getStorage();
  166.             $storage->write( $UserModel );
  167.            
  168.             return true;
  169.         }
  170.     }
  171.    
  172.     /**
  173.      * Translate-Able Messages
  174.      * @param $AuthResult
  175.      * @return string
  176.      */
  177.     public function getTranslateableMessage($AuthResult){
  178.         switch( $AuthResult->getCode() )
  179.         {
  180.             case Zend_Auth_Result::FAILURE_CREDENTIAL_INVALID:
  181.                 $message = 'LOGIN_FAILURE_INVALID_PASSWORD';
  182.                 break;
  183.                
  184.             case Zend_Auth_Result::FAILURE_IDENTITY_AMBIGUOUS:
  185.                 $message = 'LOGIN_FAILURE_INVALID_USERNAME';
  186.                 break;
  187.                
  188.             case Zend_Auth_Result::FAILURE_IDENTITY_NOT_FOUND:
  189.                 $message = 'LOGIN_FAILURE_USERNAME_NOT_FOUND';
  190.                 break;
  191.                
  192.             case Zend_Auth_Result::FAILURE_UNCATEGORIZED:
  193.             case Zend_Auth_Result::FAILURE:
  194.             default:
  195.                 $message = 'LOGIN_FAILURE';
  196.         }
  197.        
  198.         return $message;
  199.     }
  200. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement