大佬教程收集整理的这篇文章主要介绍了php-Zend Navigation:我应该在私有应用程序中的哪个位置加载ACL“角色”,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在处理“私人”应用程序,您必须登录才能进行任何操作.这给我加载Zend Navigation的角色带来了一些问题.目前,我正在引导程序中“初始化” Zend Navigation;很好,直到我向Zend Nav添加ACl.问题是我想从我的身份验证存储中加载“ userRole”,但是直到用户登录后才存在存储,因此在登录页面上出现“正在尝试获取非对象属性”警告.这是因为在登录之前,auth的存储区中没有任何内容,因此auth-> userRole为“无”,因为auth-> geTinstance()-> getIdentity()-> ???将为空,直到用户登录并配置了auth.
我没有在登录页面上使用Zend Nav,实际上,我为登录页面提供了另一种布局(根本没有导航); ‘if!$auth-> hasIdentity'(false)使用登录布局,仅在整个系统范围内显示该问题的登录页面,因为我说过该应用程序是完全私有的,因此@L_489_20@认为’guest’角色或类似角色似乎是一种“肮脏”的方法,因为一旦用户登录,它就必须以任何方式重新配置身份验证.只是为了取悦登录页面而设置通用身份验证身份似乎不合适.
我要说的是,在哪里移动Zend Nav的“ init”或至少移动con@L_618_26@ure ACL的好地方?还是可以搬动整个东西?
这是我在bootstrap.PHP中用于Zend导航的内容:
protected function _initNavigation() {
$this->_logger->info('Bootstrap ' . __METHOD__);
$this->bootstrap('layout');
$layout = $this->getresource('layout');
$view = $layout->getView();
$con@L_618_26@ = new Zend_Con@L_618_26@_Xml(APPLICATION_PATH . '/con@L_618_26@s/navigation.xml', 'nav');
$container = new Zend_Navigation($con@L_618_26@);
$acl = new Application_Model_Acl_Acl();
$role = Zend_Auth::geTinstance()->getIdentity()->userRole;
$view->navigation($container)->setAcl($acl)->setRole($rolE);
}
引导运行时,“ $role = Zend_Auth :: geTinstance()-> getIdentity()-> userRole”为空(或非对象).
我的所有ACL要么发生在控制器中(在操作中),要么某些发生在模型中的某个时刻,尽管我不反对Web服务或其他任何东西,所以也许它们将留在控制器中,但是我有灵活性,因为我在模型中有ACL(那是“域”吧?
我仅在Zend Nav上使用ACL进行布局和用户体验.我从Zend Nav获得的菜单和链接将根据用户角色为“灰色”,不存在或处于活动状态(并且可见),例如,“用户”角色将不会获得许多“管理员”选项,这是由控制器中的ACL强制执行,因此不能简单地键入url并到达某个区域.
我的另一个想法是,也许我应该针对这种情况考虑将登录名移入引导程序,但是我不确定这是否是个好主意?
class Plugins_Controller_ZendNavInit extends Zend_Controller_Plugin_Abstract {
public function predispatch(Zend_Controller_request_Abstract $request) {
$auth = Zend_Auth::geTinstance();
if ($auth->hasIdentity()) {
$con@L_618_26@ = new Zend_Con@L_618_26@_Xml(APPLICATION_PATH . '/con@L_618_26@s/navigation.xml', 'nav');
$container = new Zend_Navigation($con@L_618_26@);
$acl = new Application_Model_Acl_Acl();
$layout = Zend_Layout::getMvcInstance();
$view = $layout->getView();
$role = Zend_Auth::geTinstance()->getIdentity()->userRole;
$view->navigation($container)->setAcl($acl)->setRole($rolE);
}
}
}
效果很好;我当然必须像其他任何人一样注册我的插件.我还将身份验证检查也移到了前控制器插件上.
解决方法:
您可以在登录之前建立匿名角色,并为匿名用户处理@R_802_10584@的ACL策略.
例如,检查this response,了解如何使用Auth插件在Predispatch上捕获未经身份验证的用户.
以上是大佬教程为你收集整理的php-Zend Navigation:我应该在私有应用程序中的哪个位置加载ACL“角色”全部内容,希望文章能够帮你解决php-Zend Navigation:我应该在私有应用程序中的哪个位置加载ACL“角色”所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。