|
|
1
10
您应该创建自己的Zend_Auth_适配器。此适配器将尝试对您的三个资源进行身份验证,并将其标记在私有成员变量中,以便您可以知道哪些登录尝试已成功进行身份验证。 要创建身份验证适配器,可以将Zend_Auth_Adapter_DbTable作为基础。 因此,在\uu构造中,您可以传递每个资源中使用的三个适配器,而不是只传递一个DbTable适配器。只有在每个适配器使用不同的资源(例如LDAP)或其他数据库(如果不使用)时,才能这样做,如果不使用,则只能传递一个适配器并在配置选项中设置三个不同的表名。 下面是来自Zend_Auth_Adapter_DbTable的示例:
下面的方法来自Zend_Auth_Adapter_DbTable,尝试对一个表进行身份验证,您可以将其更改为在三个表中进行尝试,对于每个表,当您获得成功时,将其设置为private member变量中的标志。类似于$result['group1]=1;您将为每次成功登录尝试设置1。
仅当三次登录尝试中的一次成功通过身份验证时,才会返回有效的$authresult。 现在,在控制器中,尝试登录后:
可以将此表单Zend_Auth_Adapter_DbTable作为基础:
因此,您将创建getResult()方法,该方法可以返回此行以及$this->result['groupX']标志。 类似于:
毕竟,您可以使用Zend_Acl来控制您的视图和其他操作。由于Zend Auth存储中有这些标志,因此可以将than用作角色:
http://framework.zend.com/manual/en/zend.auth.introduction.html http://zendguru.wordpress.com/2008/11/06/zend-framework-auth-with-examples/ http://alex-tech-adventures.com/development/zend-framework/61-zendauth-and-zendform.html |
|
|
2
3
我从 Zym_Auth_Adapter_Chain ,但对其进行了轻微更改,以便它不会在第一个成功返回的适配器上停止。
要从控制器调用它,只需创建链,然后使用要使用的适配器(在您的情况下,这可能是每个实体表的DB适配器),最后将适配器传递到链。
这只是基本的示例代码,您可能还想在DbTable适配器上使用setCredentialTreatment。。。 这种方法的好处是,稍后将其他现有的适配器(例如,OpenID)添加到链中,这将是微不足道的。 缺点:按原样,每次调用Zend_Auth::getInstance()->getIdentity();都会得到一个数组;。当然,您可以在链适配器中更改此项,但这留给您:p。 :我真的不认为这样做是明智的。要使其工作,您必须在不同的表中共享相同的登录名和密码帐户,因此,如果一个用户有多个角色(标识)更改了他的密码,则必须确保将此更改传播到该用户有帐户的所有标识表中。但我现在不唠叨了:p。 |
|
|
3
2
因为Zend_Auth是单例的,所以为每个身份验证源创建自定义身份验证适配器只能解决这个问题的前半部分。问题的后半部分是您希望能够同时使用多个帐户登录:每个身份验证源一个。 similar question recently . 解决方案是扩展Zend_Auth,如接受的答案所示。然后在引导中初始化不同的身份验证类型。
所以,不是单身汉
|
|
|
4
1
为什么不创建一个合并所有3个表的视图,然后根据该视图进行身份验证? |
|
|
pia-sophie · 带子级的嵌套视图,不会显示子级 8 年前 |
|
|
pia-sophie · 注册查看帮助程序了解问题 8 年前 |
|
|
GThamizh · Mysql查询格式从ZEND更改为Yii2 8 年前 |
|
|
p.wright · Zend2 Post请求 8 年前 |