/** * Verifica se o cargo do usuário logado é INFERIOR ou igual ao cargo requerido (parametro). * * @param type $roleId * @param string $module * @return boolean * @throws Exception */ public static function lowerHierarchy($roleId, $module) { if (!$module) { throw new Exception("Defina o módulo para hierarquia"); } // Cargo usado para testar $roleBoClass = Config::getZf2libConfig('roleBusinessClass', $module); $roleBO = new $roleBoClass(); $role = $roleBO->get($roleId); if (!$role) { throw new Exception("O cargo '{$roleId}' não foi definido no sistema"); } // Cargo do usuario logado. $loggedRole = $roleBO->get(self::$instance->getLogin()->getFkRole()); // Resultado true caso o cargo do usuario logado seja igual ou superior // daquele passado para teste. $result = false; if ($loggedRole->getOrder() >= $role->getOrder()) { $result = true; } return $result; }
/** * Faz um delete logico, ou seja, seta o status do registro como excluido * * @param mixed $id Recebe um numero indeterminado de parametros e cada parametro * eh tratado como uma primary key * @return boolean */ public function delete() { $row = call_user_func_array(array($this, 'get'), func_get_args()); if ($row) { $row->setStatus(Config::getZf2libConfig('statusExcluido')); return $this->save(self::UPDATE, $row); } return false; }
/** * De acordo com as configuracoes no banco de dados, incluindo heranca de acesso, * verificamos se o usuario tem acesso permitido a este controlador e acao. * Ps.: Toda acao nao cadastrada no banco eh dada como leitura (read) * * @return boolean */ private function checkAccess() { $result = false; $permission['module'] = $this->getModuleName(); $permission['controller'] = $this->getControllerName(); $permission['action'] = $this->getActionName(); // Para garantir que nao vai chegar na acao de logar e dar redirecionamento infinito. // Ou que o usuario tente deslogar e nao tenha permissao if ($permission['controller'] == 'auth' && in_array($permission['action'], array('login', 'logout'))) { $result = true; // Todo usuario que conseguiu fazer login no admin merece acessar seu Dashboard } else { if ($this->getLogin() && $permission['module'] == 'clientes' && $permission['controller'] == 'index' && in_array($permission['action'], array('index', 'dashboard'))) { $result = true; } else { // Quando a acao nao existir na tabela action // assumimos que ela eh uma acao de leitura (read) $actionBoClass = Config::getZf2libConfig('actionBusinessClass', $this->getModuleName()); $actionBO = new $actionBoClass(); $action = $actionBO->get($permission['action']); if (!$action) { $permission['action'] = Config::getZf2libConfig('actionRead'); } // Se nao tiver acesso redireciona para login if (AccessControl::allowed(implode('.', $permission))) { $result = true; } } } return $result; }
/** * Verifica permissao de acesso. * * @param RequestInterface $request * @return type */ public function checkAccess(Request $request) { // True porque por padrao eh checado o acesso de accessDeniedAction (nao tem acesso) $result = true; // Validação do parametro MODULO $module = $request->getQuery('module', 'application'); $this->validate('module', $module, array('NotEmpty')); $session = new Session(self::ACCESS_CONTROL_NAMESPACE); // Parametro Module não encontrado, assim não sabemos // que tipo de login ele tem. if (!$this->isAllValid()) { $this->setError(MsgType::DANGER, "Acesso Negado"); $session->view = $this->view; $result = false; // Agora verificamos se o usuario tem permissao de acesso // configurado pelo banco de dados } else { if ($this->getActionName() != 'access-denied') { // Puxa configuracoes de acessos do banco de dados $accessControl = AccessControl::getInstance($module); $accessControl->setupPermissions($this->getLogin() ? $this->getLogin()->getFkRole() : Config::getZf2libConfig('roleDefault'), $module); // Setor do sistema $permission = array('module' => $this->getModuleName(), 'controller' => $this->getControllerName(), 'action' => $this->getActionName()); // Quando a acao nao existir na tabela action // assumimos que ela eh uma acao de leitura (read) $actionBOClass = Config::getZf2libConfig('actionBusinessClass', $module); $actionBO = new $actionBOClass(); $action = $actionBO->get($permission['action']); if (!$action) { $permission['action'] = Config::getZf2libConfig('actionRead'); } // Verifica se usuario tem acesso $allowed = AccessControl::allowed(implode('.', $permission)); if (!$allowed) { $this->setError(MsgType::DANGER, "Acesso Negado"); $session->view = $this->view; $result = false; } } } return $result; }