php zend-framework zend-auth zend-acl

php - Varias instancias(2) de Zend_Auth



zend-framework zend-auth (4)

En ese caso, desea crear su propia clase ''Auth'' para extender y eliminar el patrón de diseño ''singleton'' que existe en Zend_Auth

Esto de ninguna manera es completo, pero puede crear una instancia y pasarle un ''espacio de nombres''. El resto de los métodos públicos de Zend_Auth deberían estar bien para ti.

<?php class My_Auth extends Zend_Auth { public function __construct($namespace) { $this->setStorage(new Zend_Auth_Storage_Session($namespace)); // do other stuff } static function getInstance() { throw new Zend_Auth_Exception(''I do not support getInstance''); } }

Luego, donde quiera usarlo, $auth = new My_Auth(''CMSUser''); o $auth = new My_Auth(''SiteUser'');

Tengo un CMS basado en Zend Framework. Utiliza Zend_Auth para la Zend_Auth de "Usuario CMS". Los usuarios de CMS tienen roles y permisos que se aplican con Zend_Acl . Ahora estoy intentando crear "Usuarios del sitio" para cosas como una tienda en línea. Para simplificar, me gustaría utilizar una instancia separada de Zend_Auth para los usuarios del sitio. Zend_Auth está escrito como singleton, así que no estoy seguro de cómo lograr esto.

Razones por las que no quiero lograr esto por roles:

  1. Contaminación de los usuarios de CMS con los usuarios del sitio (visitantes)
  2. Un usuario del sitio podría obtener accidentalmente permisos elevados
  3. Los usuarios se definen con mayor precisión como diferentes tipos de roles diferentes
  4. Los dos tipos de usuario se almacenan en bases de datos / tablas separadas
  5. Un usuario de cada tipo podría iniciar sesión simultáneamente
  6. Se necesitan diferentes tipos de información para los dos tipos de usuario
  7. Refactorización que debería tener lugar en el código existente

Estás mezclando problemas. (No es que no lo hice cuando me enfrenté por primera vez a la id)

Zend_Auth responde la pregunta "¿ese usuario es el que dice ser"? Lo que puede hacer es agregar algo más de información a su objeto de persistencia. La opción más fácil es agregar una columna más en su base de datos y agregarla al resultado .


esa es mi sugerencia:

Creo que estás en caso de que debas calcular la ACL, los recursos, los roles dinámicamente,

ejemplo {md5 (usuario del sitio o cmsuser + módulo + controlador) = número aleatorio para cada función}

y un simple plugin sería este papel se le permite a este recurso

o puedes construir como el estilo de permiso de Unix pero supongo que esta idea necesita muchas pruebas algún día construiré una igual en ZF :)

Espero que mi idea te ayude


class App_Auth { const DEFAULT_NS = ''default''; protected static $instance = array(); protected function __clone(){} protected function __construct() {} static function getInstance($namespace = self::DEFAULT_NS) { if(!isset(self::$instance[$namespace]) || is_null(self::$instance[$namespace])) { self::$instance[$namespace] = Zend_Auth::getInstance(); self::$instance[$namespace]->setStorage(new Zend_Auth_Storage_Session($namespace)); } return self::$instance[$namespace]; } }

Prueba este, solo necesitarás usar App_Auth en lugar de Zend_Auth en todas partes, o App_auth en el área del administrador, Zend_Auth en el frente