PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了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,请注明来意。
标签: