我有一个基于 Zend Framework 构建的 CMS。它使用 Zend_Auth
进行“CMS 用户”身份验证。 CMS 用户具有通过 Zend_Acl
强制执行的角色和权限。我现在正在尝试为在线商店等内容创建“站点用户”。为了简单起见,我想为站点用户使用一个单独的 Zend_Auth
实例。 Zend_Auth
是作为单例编写的,因此我不确定如何完成此操作。
我不想通过角色来完成此任务的原因:
- 站点用户(访问者)对 CMS 用户的污染
- 网站用户可能会意外获得提升的权限
- 将用户定义为不同类型比定义角色更准确
- 两种用户类型存储在不同的数据库/表中
- 每种类型的一个用户可以同时登录
- 两种用户类型需要不同类型的信息
- 需要对现有代码进行重构
最佳答案
在这种情况下,您想要创建自己的“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/