Несколько экземпляров (2) Zend_Auth

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

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

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

Solutions Collecting From Web of "Несколько экземпляров (2) Zend_Auth"

В этом случае вы хотите создать свой собственный класс «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');

 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 на передней панели

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

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

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

и простой плагин позволил бы этой роли этому регрессу

или вы можете построить как стиль разрешения unix, но я думаю, что эта идея требует многого тестирования в один прекрасный день, когда я построю один из них в ZF 🙂

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

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

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