Несколько экземпляров (2) Zend_Auth - PullRequest
2 голосов
/ 01 декабря 2010

У меня есть CMS, построенная на Zend Framework.Для аутентификации «Пользователь CMS» используется Zend_Auth.Пользователи CMS имеют роли и разрешения, которые применяются с Zend_Acl.Сейчас я пытаюсь создать «Пользователи сайта» для таких вещей, как интернет-магазин.Для простоты я хотел бы использовать отдельный экземпляр Zend_Auth для пользователей сайта.Zend_Auth написано как синглтон, поэтому я не уверен, как это сделать.

Причины, по которым я не хочу этого делать с помощью ролей:

  1. ЗагрязнениеПользователи CMS с пользователями сайта (посетители)
  2. Пользователь сайта может случайно получить повышенные разрешения
  3. Пользователи более точно определены как разные типы, чем разные роли
  4. Два типа пользователейхранятся в отдельных базах данных / таблицах
  5. Один пользователь каждого типа может быть зарегистрирован одновременно
  6. Для двух типов пользователей необходимы разные типы информации
  7. Рефакторинг, который потребуетпроходить по существующему коду

Ответы [ 4 ]

4 голосов
/ 01 декабря 2010

В этом случае вы хотите создать свой собственный класс 'Auth' для расширения и удаления шаблона проектирования 'singleton', существующего в Zend_Auth

Это ни в коем случае не завершено, но вы можете создать экземпляри передать ему «пространство имен».Остальные общедоступные методы Zend_Auth вам подойдут.

<?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');
    }  
}

Тогда, где вы хотите его использовать, $auth = new My_Auth('CMSUser'); или $auth = new My_Auth('SiteUser');

1 голос
/ 08 ноября 2012
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];
    }
}

Попробуйте это, просто нужно везде использовать App_Auth вместо Zend_Auth или App_auth в области администратора, Zend_Auth спереди

0 голосов
/ 01 декабря 2010

Вы смешиваете проблемы.(не то, что я не знал, когда впервые столкнулся с идентификатором)

Zend_Auth отвечает на вопрос "это тот пользователь, которым он себя считает"?Что вы можете сделать, так это добавить дополнительную информацию к вашему объекту персистентности.Самый простой вариант - добавить еще один столбец в вашу БД и добавить его к результату .

0 голосов
/ 01 декабря 2010

это мое предложение:

я думаю, что вы должны рассчитывать ACL, ресурсы, роли динамически,

пример {md5 (siteuser или cmsuser + module + controller) = случайное число для каждой роли}

и простой плагин, если бы эта роль была допущена к этому ресурсу

или вы можете создать как Unix-стиль, но я думаю, что эта идея требует много испытаний однажды я создам такую ​​же в ZF :)

Надеюсь, моя идея поможет вам

...