php - Zend_Auth的多个实例(二)

标签 php zend-framework zend-auth zend-acl

我有一个基于 Zend Framework 构建的 CMS。它使用 Zend_Auth 进行“CMS 用户”身份验证。 CMS 用户具有通过 Zend_Acl 强制执行的角色和权限。我现在正在尝试为在线商店等内容创建“站点用户”。为了简单起见,我想为站点用户使用一个单独的 Zend_Auth 实例。 Zend_Auth 是作为单例编写的,因此我不确定如何完成此操作。

我不想通过角色来完成此任务的原因:

  1. 站点用户(访问者)对 CMS 用户的污染
  2. 网站用户可能会意外获得提升的权限
  3. 将用户定义为不同类型比定义角色更准确
  4. 两种用户类型存储在不同的数据库/表中
  5. 每种类型的一个用户可以同时登录
  6. 两种用户类型需要不同类型的信息
  7. 需要对现有代码进行重构

最佳答案

在这种情况下,您想要创建自己的“Auth”类来扩展和删除 Zend_Auth 中存在的“单例”设计模式

这绝不是完整的,但您可以创建一个实例并向其传递一个“命名空间”。 Zend_Auth 的其余公共(public)方法应该适合您。

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

关于php - Zend_Auth的多个实例(二),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4318599/

相关文章:

php - 如何在 Zend 中重定向到不同的 Controller 操作

php - 无法将数据插入数据库laravel ajax

php - 将半动态网站与 CMS 集成

php - 如何从模型中获取 Zend\Db\Adapter 实例? (ZF2)

zend-framework - 如何在所有 Controller init() 函数中运行相同的行?

php - Zend_Auth_Adapter_DbTable 和 PHP crypt

php - SPLFileObject next() 行为

php - Laravel 的 Artisan 说什么都不迁移

php - mysql与2个表或php的减法

php - Zend_Auth getidentity 始终返回 null