我有一个基于Zend Framework构建的CMS。它使用Zend_Auth
进行“CMS用户”身份验证。 CMS用户拥有使用Zend_Acl
强制执行的角色和权限。我现在正在尝试为在线商店之类的东西创建“网站用户”。为简单起见,我想为网站用户使用单独的Zend_Auth
实例。 Zend_Auth
是作为单身人士写的,所以我不知道如何做到这一点。
我不希望通过角色来实现这一目标的原因:
答案 0 :(得分:4)
在这种情况下,你想创建自己的'Auth'类来扩展和删除Zend_Auth中存在的'singleton'设计模式
这绝不是完整的,但您可以创建一个实例并将其传递给“命名空间”。 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 :(得分:1)
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
答案 2 :(得分:0)
这是我的建议:
我认为你应该动态计算ACL,资源,角色,
示例{md5(siteuser或cmsuser + module + controller)=每个角色的随机数}
和一个简单的插件将允许此角色使用
或者你可以构建像unix权限样式,但我想这个想法需要很多测试 有一天,我将在ZF中建立一个像这样的人。
我希望我的想法可以帮助你
答案 3 :(得分:0)
你在混合问题。 (当我第一次面对id时,并不是我没有这样做)
Zend_Auth回答的问题是“他声称自己是那个用户”吗?您可以做的是向持久性对象添加更多信息。最简单的选择是add one more column into your DB and add it to result。