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:
- Contaminación de los usuarios de CMS con los usuarios del sitio (visitantes)
- Un usuario del sitio podría obtener accidentalmente permisos elevados
- Los usuarios se definen con mayor precisión como diferentes tipos de roles diferentes
- Los dos tipos de usuario se almacenan en bases de datos / tablas separadas
- Un usuario de cada tipo podría iniciar sesión simultáneamente
- Se necesitan diferentes tipos de información para los dos tipos de usuario
- 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