✏️ 正在编辑: Auth.php
路径:
/srv/systems_dir/yuppiecred-lidernegocios/application/plugins/Auth.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php class Plugin_Auth extends Zend_Controller_Plugin_Abstract { /** @var string[] */ protected const CONTROLLERS = [ 'ajax', 'acesso-discador', 'acesso-externo', 'service', 'chat-bot', 'cron', 'error', 'proposta-cliente', 'corretor-cadastro-site', 'simulacao-aberta', 'automacoes', 'api-autocontratacao' ]; /** * This method is executed before the action * * @link http://framework.zend.com/manual/en/zend.controller.action.html#zend.controller.action.prepostdispatch * @param Zend_Controller_Request_Abstract $request */ public function preDispatch(Zend_Controller_Request_Abstract $request) { if (in_array($request->getControllerName(), self::CONTROLLERS)) { return; } if( !Yuppie_Auth::hasIdentity() && $request->getControllerName() != 'auth' ){ // Monta a url para onde redirecionar após efetuar o login $params = $request->getParams(); $url = $params['controller'] . '/' . $params['action']; if( isset($params['module']) && $params['module'] && $params['module'] != 'default' ){ $url = $params['module'] . '/' . $url; } foreach ( $params as $paramName => $paramValue ) { if( !in_array($paramName, array( 'controller', 'action', 'error_handler', 'module', 'tipo_acesso', 'login', 'senha', 'submit' )) ){ $url .= "/{$paramName}/{$paramValue}"; } } $request->setParam('url', $url); $request->setControllerName('auth'); $request->setActionName('login'); return; } $acesso = new Model_DbTable_Acesso(); if (!$acesso->validar()) { Zend_Controller_Action_HelperBroker::getStaticHelper('FlashMessenger')->addMessage( array( 'alert' => 'Você foi desconectado porque ' . 'identificamos um duplo acesso a esta ' . 'conta.' ) ); Zend_Auth::getInstance()->clearIdentity(); $request->setControllerName('auth'); $request->setActionName('login'); return; } if ($request->getControllerName() == 'auth') { return; } $identity = Yuppie_Auth::getIdentity(); if ($identity->a2f && !$identity->check_code_gauth) { $this->_forceLogout('Token inválido ou não localizado! Efetue o login novamente.'); } if (isset($identity->ip) && trim($identity->ip) && $identity->ip != $this->getClientIp()) { $this->_forceLogout('Fora do local permitido.'); } $dias = explode(',', $identity->dias); if (Zend_Date::now()->compareTime($identity->hora_inicio, 'HH:mm') < 0 || Zend_Date::now()->compareTime($identity->hora_fim, 'HH:mm') > 0 || !in_array(Zend_Date::now()->get(Zend_Date::WEEKDAY_DIGIT), $dias)) { $this->_forceLogout('Fora do dia/horário permitido.'); } $ns = new Zend_Session_Namespace(); if ((isset($identity->mudar_senha) && $identity->mudar_senha == 1) || (empty($identity->senha_atualizada) && $identity->grupo == "Corretor")) { $request->setControllerName('index'); $request->setActionName('nova-senha-corretor'); } try { if (isset($ns->acl)) { if (!$ns->acl->isAllowed($identity->grupo, $request->getControllerName(), $request->getActionName())) { $request->setControllerName('index'); $request->setActionName('sem-permissao'); } } else { $request->setControllerName('index'); $request->setActionName('sem-permissao'); } } catch (Exception $e) { $request->setControllerName('index'); $request->setActionName('sem-permissao'); } } protected function _forceLogout($msg) { Zend_Controller_Action_HelperBroker::getStaticHelper('FlashMessenger')->addMessage(['alert' => $msg]); $auth = new Zend_Session_Namespace('Zend_Auth'); $auth->unsetAll(); Zend_Controller_Action_HelperBroker::getStaticHelper('redirector')->setGotoUrl('auth/login'); } public function getClientIp() { if (getenv('HTTP_CLIENT_IP')) { return getenv('HTTP_CLIENT_IP'); } elseif (getenv('HTTP_X_FORWARDED_FOR')) { return getenv('HTTP_X_FORWARDED_FOR'); } elseif (getenv('HTTP_X_FORWARDED')) { return getenv('HTTP_X_FORWARDED'); } elseif (getenv('HTTP_FORWARDED_FOR')) { return getenv('HTTP_FORWARDED_FOR'); } elseif (getenv('HTTP_FORWARDED')) { return getenv('HTTP_FORWARDED'); } elseif (getenv('REMOTE_ADDR')) { return getenv('REMOTE_ADDR'); } else { return 'UNKNOWN'; } } public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request) { if (Yuppie_Auth::hasIdentity()) { // user is logged in // get an instance of Zend_Session_Namespace used by Zend_Auth $authns = new Zend_Session_Namespace(Yuppie_Auth::getStorage()->getNamespace()); // set an expiration on the Zend_Auth namespace where identity is held $authns->setExpirationSeconds(2 * 3600); // expire auth storage after 30 min // $authns->setExpirationSeconds(4 * 3600); // expire auth storage after 4 hour } } }
💾 保存文件
← 返回文件管理器