Regresar   Foros del Web > Programación para sitios web > PHP > PHP orientado a objetos

El registro es Gratis en Foros del Web
Respuesta
 
Herramientas Buscar en Tema Desplegado
Antiguo 26/04/08, 10:27:57   #1 (permalink)
alanglz ha deshabilitado el Karma
 
Registrado: abr 2008
Ubicación: Saltillo, Coahuila, México
Mensajes: 2
Contactar con alanglz a través de MSN
alanglz is offline  
Zend_Acl, Zend_Auth, Zend_DB, error al unirlos

La idea es tener un usuario y contraseña, que al momento en que validas que existe y entras, verifique que si es administrador, invitado u otro, cosa que ya esta definida en la base de datos y poner los permisos debidos, solo que me sale un error, de que la variable $acl no esta declarada etc, como puedo corregir esto? como llamó los valores que deberian ser guardados en ACL?

Aqui esta el codigo=

index.php
Código PHP:
<?php
//Error reporting
error_reporting(E_ALL E_STRICT);
ini_set('display_errors','on');

//modify include path to include path to library
ini_set('include_path',ini_get('include_path') . PATH_SEPARATOR '../library');

Zend_Loader::loadClass('Zend_Controller_Front');
Zend_Loader::loadClass('Zend_Config_Ini');
Zend_Loader::loadClass('Zend_Registry');
Zend_Loader::loadClass('Zend_Db');
Zend_Loader::loadClass('Zend_Db_Table');
//clase para auth
Zend_Loader::loadClass('Zend_Auth');
Zend_Loader::loadClass('Zend_Acl');

require_once (
"Zend/Session.php");
Zend_Session::start();

// load configuration
$config = new Zend_Config_Ini('../application/config.ini','general');
$registry Zend_Registry::getInstance();
$registry->set('config'$config);

// setup database
$db Zend_Db::factory($config->db->adapter,$config->db->config->toArray());
Zend_Db_Table::setDefaultAdapter($db);

$dbAdapter Zend_Db::factory($config->db->adapter,
        
$config->db->config->toArray());
Zend_Db_Table::setDefaultAdapter($dbAdapter);
Zend_Registry::set('dbAdapter'$dbAdapter);

//get the front controller instance
$front Zend_Controller_Front::getInstance();
$front->setControllerDirectory('../application/controllers');
//$frontController->setBaseUrl('/localhost/noticias2');
$front->throwExceptions(true);

$configuracion = new Zend_Config_Ini('../application/config.ini','test');   

if(
$configuracion->developer)
    
$front->throwExceptions(true);  //true si quieres ver las excepeciones, false para darle tu los errores
else
    
$front->throwExceptions(false);

//run
$front->dispatch();
--------------------------------------------
IndexController.php
---------------
Código PHP:
<?php

    
class IndexController extends Zend_Controller_Action
    
{
       
    function 
preDispatch()
    {       
            
$auth Zend_Auth::getInstance();           
                   
            if (!
$auth->hasIdentity())
        {
            
//$this->_redirect('auth/login');
            
$this->_redirect('index.php/auth/login');
        }
    }

   
    function 
init()
    { 
        
$this->initView();
        
$this->view->baseUrl $this->_request->getBaseUrl();
        require_once(
'News.php');
                 
        
$this->view->user Zend_Auth::getInstance()->getIdentity();
    }
    function 
indexAction()
    {
    
/*
    //
       //testing   
        $request = $this->getRequest();

        $controllerName = $request->getControllerName();

        $acl = new Zend_Acl();
                   
        if (!$acl->has($controllerName)) {
            throw new Exception('Sorry, the requested controller does not exist as an ACL resource');
        }

        if (!$acl->isAllowed($role, $controllerName, $request->getActionName())) {
            $request->setControllerName('index')
                    ->setActionName('denied')
                    ->setDispatched(false);
        }
        //    */
            
$auth Zend_Auth::getInstance();    //---------------------where it should go, in init? in index? i think it should go after the check for the identity in my DB, im i wrong?
 
            
if ($auth->hasIdentity()) {
                
//echo $auth->getIdentity()->username;
               
            
switch ($auth->getIdentity()->role_name) {
                case 
'administrador':
                    
$role 'administrador';
                    break;
                default:
                    
$role 'editor';
                    break;
            }
        } else {
            
$role 'guest';
        }
       
        require_once(
'MyAcl.php');
           
        
$acl = new MyAcl();        //deberia llevar parametros como auth? o role? como el de los ejemplos de los tutoriales? no veo el porque si
           
       
        
echo $this->$acl->isAllowed($role'delete') ? 'allowed' 'denied'//--------------como hago para funcionar este?? aqui?
       
       
        
$this->view->title "Mis News";
        
$news = new News();
        
$this->view->newss $news->fetchAll();

        
$this->render();
    }
    function 
addAction()
    {
        
$this->view->title "Agregar News";
       
        if (
$this->_request->isPost()) {
    
Zend_Loader::loadClass('Zend_Filter_StripTags');
    
$filter = new Zend_Filter_StripTags();
    
$content $filter->filter($this->_request->getPost('content'));
    
$content trim($content);
    
$title trim($filter->filter($this->_request->getPost('title')));
    if (
$content != '' && $title != '') {
        
$data = array(
            
'title' => $title,
            
'content' => $content,
        );
        
$news = new News();
        
$news->insert($data);
        
$this->_redirect('/');
        return;
    }
}
// set up an "empty" news
    
$this->view->news = new stdClass();
    
$this->view->news->id null;
    
$this->view->news->title '';
    
$this->view->news->content '';
   
    
// additional view fields required by form
    
$this->view->action 'add';
    
$this->view->buttonText 'Add';
       
       
        
$this->render();
    }
   
    function 
editAction()
    {   
$news = new News();   //agregado no estaba en el manual
        
$this->view->title "Editar News";

        if (
$this->_request->isPost()) {
    
Zend_Loader::loadClass('Zend_Filter_StripTags');
    
$filter = new Zend_Filter_StripTags();
   
    
$id = (int)$this->_request->getPost('id');
    
$content $filter->filter($this->_request->getPost('content'));
    
$content trim($content);
    
$title trim($filter->filter($this->_request->getPost('title')));
   
    if(
$id !== false) {
    if (
$content != '' && $title != '') {
        
$data = array(
            
'content' => $content,
            
'title' => $title,
        );
        
$where 'id = ' $id;
        
$news->update($data$where);
        
$this->_redirect('/');

        return;
       
    }   else {
    
$this->view->news $news->fetchRow('id='.$id);
             }


        }
        else {
    
// news id should be $params['id']
    
$id = (int)$this->_request->getParam('id'0);
    if (
$id 0) {
        
// $this->view->news = $news->fetchRow('id='.$id);
        
$this->view->news $news->fetchRow($news->select()->where('id = ?'$id));
                 }
          }
// additional view fields required by form
$this->view->action 'edit';
$this->view->buttonText 'Update';

  
$this->render();
}


    function 
deleteAction()
    {         
  
$this->view->title "Delete news";
  
$news = new news();
  if (
$this->_request->isPost()) {
      
Zend_Loader::loadClass('Zend_Filter_Alpha');
      
$filter = new Zend_Filter_Alpha();
      
$id = (int)$this->_request->getPost('id');
      
$del $filter->filter($this->_request->getPost('del'));
      if (
$del == 'Yes' && $id 0) {
           
$where 'id = ' $id;
           
$rows_affected $news->delete($where);
      }
  } else {
      
$id = (int)$this->_request->getParam('id');
      if (
$id 0) {
           
// only render if we have an id and can find the news.
           
$this->view->news $news->fetchRow('id='.$id);
           if (
$this->view->news->id 0) {
               
$this->render();
               return;
           }
      }
  }
  
// redirect back to the news list unless we have rendered the view
  
$this->_redirect('/');
}


}
-----------------------------------------------------------------
MyAcl.php
---------------------------------
Código PHP:
<?php
class MyAcl extends Zend_Acl

   
    public function 
__construct()
    {
        
//parent::__construct();

        //step by step
            
require_once 'Zend/Acl.php';
           
            
$acl = new Zend_Acl();
           
            require_once 
'Zend/Acl/Resource.php';
            
$acl->add(new Zend_Acl_Resource('index'));
            
$acl->add(new Zend_Acl_Resource('login'));
           
            
$acl->add(new Zend_Acl_Resource('view'));
            
$acl->add(new Zend_Acl_Resource('add'));
            
$acl->add(new Zend_Acl_Resource('edit'));
            
$acl->add(new Zend_Acl_Resource('delete'));
           
            require_once 
'Zend/Acl/Role.php';
            
$roleGuest = new Zend_Acl_Role('guest');
            
$acl->addRole($roleGuest);
            
$acl->addRole(new Zend_Acl_Role('editor'), $roleGuest);
            
$acl->addRole(new Zend_Acl_Role('administrador'));
           
            
// Guest may only view content
            
$acl->allow('guest''index',array('init''index'));
           
            
// Staff inherits view privilege from guest, but also needs additional privileges
            
$acl->allow('editor''index',array('edit''add'));
            
$acl->deny('editor''index',array('delete'));
            
// Administrator inherits nothing, but is allowed all privileges
            
$acl->allow('administrador');

            
//echo $acl->isAllowed($role, 'delete') ? 'allowed' : 'denied';

    
}
   

}
----------------------------
all with their views and the *.htaccess enable and working
-------------
la base de datos si funciona, la hice con phpmyadmin

solo contien por el momento 3 tablas
1-comments (comentarios a las noticias)
2.-news (noticias)
3.-user (usuario)
3.1-id
3.2-username (nombre de usuario)
3.3-password
3.4-role_name
3.4.1-editor
3.4.2-administrador

---------
De antemano muchas gracias.

Última edición por GatorV fecha: 27/04/08 a las 22:02:36. Razón: tags PHP
  Responder Con Cita
Antiguo 27/04/08, 16:34:46   #2 (permalink)
pablofmorales no ha recibido karma de otros usuarios
 
Registrado: abr 2008
Mensajes: 20
pablofmorales is offline  
Re: Zend_Acl, Zend_Auth, Zend_DB, error al unirlos

Fijate que Rumo en zfforum.es ya te respondio :P
  Responder Con Cita
Antiguo 30/04/08, 08:46:52   #3 (permalink)
alanglz ha deshabilitado el Karma
 
Registrado: abr 2008
Ubicación: Saltillo, Coahuila, México
Mensajes: 2
Contactar con alanglz a través de MSN
alanglz is offline  
Re: Zend_Acl, Zend_Auth, Zend_DB, error al unirlos

mmm como lo habia escrito en el zfforum, la solucion que me dieron son exactamente de las 2 paginas que comenté, ya las he revisado, alguien sabe cual es el error en el codigo?, puede ser mas recomendable que este en el bootstrap pero aun asi, la logica deberia funcionar, pero porque no?
gracias
  Responder Con Cita
Antiguo 03/05/08, 12:33:13   #4 (permalink)
rumo tiene un saldo positivo de karma
 
Registrado: ago 2006
Mensajes: 166
Contactar con rumo a través de MSN Contactar con rumo a través de Yahoo Send a message via Skype™ to rumo
rumo is offline  
Re: Zend_Acl, Zend_Auth, Zend_DB, error al unirlos

mmm no sabia que habias posteado aqui tambien, mira revisando tu codigo, no estoy seguro si sera el uncio error pero en el controlador estas haciendo echo a $this->$acl->isAllowed();

cuando la variable esta definida en el ambito del metodo y no de la clase, por lo tanto no deberias usar $this, ademas de estas utilizando this buscando un variable y no la propiedad acl. $this->$acl->isAllowed() cuando deberia ser $this->acl->isAllowed()

finalmente tu codigo deberia ser:
echo $acl->isAllowed($role, 'delete') ? 'allowed' : 'denied';

de todas maneras ya te edite el ejemplo de DevZone con una version actualizada, pruebalo y avisas que tal va.

saludos.
  Responder Con Cita
Respuesta


Califica este Tema - Zend_Acl, Zend_Auth, Zend_DB, error al unirlos.

Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado Califica este Tema
Califica este Tema:

Reglas del foro
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está activado
Las caritas están activado
Código [IMG] está activado
Código HTML está desactivado


Todas las horas son GMT -6. La hora es 16:58:12.

Message Board Statistics

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96