/** * Creates an ACL for a specific user * @param stdClass $usuario - usuario logado, recebido do Zend_Auth * @return Core_Acl */ public static function createAcl($usuario) { //Lets assume we have a model for the page_privileges with a method like this //which would return PagePrivilege objects with the page_id passed as the param. $privilegios_unidade = DaoPrivilegio::getPrivilegiosPorUnidade((int) $usuario->ID_UNIDADE); $privilegios_usuario = DaoPrivilegioUsuario::getPrivilegiosPorUsuario((int) $usuario->ID); $acl = new Core_Acl(); $acl->addRole(new Zend_Acl_Role($usuario->ID)); $acl->setIdUnidade($usuario->ID_UNIDADE); $acl->setNomeUnidade($usuario->DIRETORIA); $acl->setTrocouUnidade($usuario->TROCOU ? true : false); foreach ($privilegios_unidade as $privilege) { $recurso = DaoRecurso::getRecursoById($privilege['ID_RECURSO']); if (!$acl->has($recurso)) { $acl->addResource($recurso); } // Checa pela presenca de assertion if ($recurso->hasClasseAssertion()) { $acl->allow($usuario->ID, $recurso, null, new $recurso->classe_assertion()); } else { if ($privilege['PERMISSAO'] == 1) { $acl->allow($usuario->ID, $recurso); } else { $acl->deny($usuario->ID, $recurso); } } } foreach ($privilegios_usuario as $privilege2) { $recurso = DaoRecurso::getRecursoById($privilege2['ID_RECURSO']); // @todo foi adicionado a condicao !NULL para corrigir possivel bug, analizar! if (!is_null($recurso) && !$acl->has($recurso)) { $acl->addResource($recurso); } // @todo foi adicionado a condicao !NULL para corrigir possivel bug, analizar! // Checa pela presenca de assertion if (!is_null($recurso) && $recurso->hasClasseAssertion()) { $acl->allow($usuario->ID, $recurso, null, new $recurso->classe_assertion()); } else { if ($privilege2['PERMISSAO'] == "1") { $acl->allow($usuario->ID, $recurso); } else { $acl->deny($usuario->ID, $recurso); } } } if ($acl->isTrocouUnidade()) { $acl->allow($usuario->ID, 115); } return $acl; }
$out['message'] = 'SGDOC - Permissão alterada com sucesso.'; $out['success'] = 'true'; } catch (Exception $e) { $out = array('success' => 'false', 'error' => $e->getMessage()); } break; case 'excluir-privilegio-usuario': try { // $manterPermissao = array(); $manterPermissao = $privilegio; // if ($getPrivilegioUsuario->result == true) { $manterPermissao['ID'] = $getPrivilegioUsuario->result[0]['ID']; } $rs = DaoPrivilegioUsuario::deletePrivilegioUsuario($manterPermissao); if ($rs->success == false) { throw new Exception($rs->error); } Controlador::getInstance()->cache->clean('matchingAnyTag', array('acl_usuario_' . $idUsuario)); $out['message'] = 'SGDOC - Permissão alterada com sucesso.'; $out['success'] = 'true'; } catch (Exception $e) { $out = array('success' => 'false', 'error' => $e->getMessage()); } break; } } catch (Exception $e) { LogError::sendReport($e); $out = array('success' => 'false', 'error' => $e->getMessage()); }