如何使用学说适配器时摆脱Zend_Auth的/ Zend_Acl中的作用? 让所有一起工作(ho

2019-09-28 00:29发布

我使用Zend_Auth的使用doctrine.I相信每一个引导正确地做,我可以登录的项目。

我的适配器是这样的:

class Abra_Auth_Adapter_Doctrine implements Zend_Auth_Adapter_Interface {

protected $_resultArray;
private $username;
private $password;

public function  __construct($username, $password) {

    $this->username = $username;
    $this->password = $password;

}

//based on feedbacks as response authenticate has changed to this
public function  authenticate() {
    $q = Doctrine_Query::create()
    ->from("Abra_Model_User u")
    ->leftJoin("u.Role r")
    ->where("u.username=? AND u.password=?", array($this->username,$this->password));
    $result = $q->execute();
    if (count($result) == 1) {
        return new Zend_Auth_Result(Zend_Auth_Result::SUCCESS, $result->get("Mylibrary_Model_User"), array());//autoloaderNamespaces[] = "Mylibrary_" in application.ini
    } else {
        return new Zend_Auth_Result(Zend_Auth_Result::FAILURE, null, array("Authentication Unsuccessful"));
    }
}

我Abra_Controller_Pluging_Acl看起来像这样

class Abra_Controller_Plugin_Acl extends Zend_Controller_Plugin_Abstract {

public function preDispatch(Zend_Controller_Request_Abstract $request) {
    parent::preDispatch($request);
    $controller = $request->getControllerName();
    $action = $request->getActionName();
    $module = $request->getModuleName();

    $auth = Zend_Auth::getInstance();
    if($auth->hasIdentity()){
        $identity = $auth->getIdentity();
        $roles = $identity["Role"];
        $role = $roles["name"];
        $role = (empty ($role) || is_null($role))? "regular" : $role ;
    } else {
        $role = "guest";
    }

 }

现在具有Doctrine_Event致命错误:spl_autoload()[function.spl-自动加载]:类Doctrine_Event不能加载。 我已经看到了这张贴在这里 ,我想知道如何能够使用Zend_Session的影响我,而我在我的php.thanks apc.dll启用了很多关于阅读本这是真的

Answer 1:

如何让角色:在您的适配器,就登录成功,而不是只返回用户名字段,大约全部退回用户对象如何? 那么整个事情将可当你调用Zend_Auth::getIdentity()

问题1:如果你把控制器作为资源和ACL规则将是每个模块不同,则资源的名称应反映模块,以及。 这将解决与相同的控制器名称模块的问题。

问题2:我不知道我理解正确。 Zend_Auth的和它的存储需要保持UER身份在自己的会话命名空间的照顾。 然而,我所遇到的怎么办时,在数据库中更改的用户记录的问题 - 比如,用户在他的个人资料修改他的全名他的登录会话 - 你在你的网站模板显示的是全名从拉Zend_Auth::getIdentity() 作为一个用户,我希望改变在可视化界面被反射,但变化已经发生仅早在分贝,而不是在会议上。

我在过去做的是创建一个获取新的用户记录,并始终返回成功的附加身份验证适配器。 当用户更新他的个人资料,我叫Zend_Auth::authenticate()使用这个简单的适配器。 会话存储更新,并且一切都很好,与世界同步。

[这种方法几乎可以肯定是一个黑客,所以我会很乐意听取替代方法。 我敢肯定,我可以直接设置在会话存储的值,但是当我最后一次尝试它,我不能让它相当的工作。 于是使出了额外的适配器解决方法。]



文章来源: how to get role from Zend_Auth/Zend_ACL when using a Doctrine adapter? getting all work together