예제 #1
0
 /**
  * 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;
 }
예제 #2
0
 /**
  * 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;
 }
예제 #3
0
 /**
  * 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;
 }