如果用户未登录Zend Framework,如何默认登录屏幕?

时间:2013-11-13 07:41:54

标签: php zend-framework

所以我设置了一个到特定操作,控制器和模块的默认路由。 现在,当有人访问该网站时,它将默认在那里。

我已经设置了身份验证和授权,并且最初在用户未登录时默认为登录操作。

然而事实并非如此,我真的不想使用:

$auth = Zend_Auth::getInstance();
        if !($auth->hasIdentity())
        {
                     $this->_redirect('/admin/user/login');
                }

如果有更优雅的方式......

我在preDispatch方法中有这个优雅的解决方案:

if (!$acl->isAllowed($role, $controller, $action))
        {
            if ($role == 'guest')
            {
                $request->setControllerName('user');
                $request->setActionName('login');
                $request->setModuleName('admin');
            }
            else
            {
                $request->setControllername('error');
                $request->setActionname('noauth');
            }
        }

似乎更优雅但不起作用

2 个答案:

答案 0 :(得分:0)

要重定向到某些页面:

   return $this->redirect()->toRoute('/admin/user/login');

答案 1 :(得分:0)

检查是否允许用户查看页面必须在其他地方实现(我为该操作预先设置了X_Controller_Plugin)。我找到使用Acl的最佳方法是向导航添加有关每个页面权限和资源的信息

<?php
Zend_Navigation_Page_Mvc::factory(
    array(
        'label' => 'home',
        'route' => 'home',
        'privilege' => 'view',
        'resource' => 'guest',
        'pages' => array(...)
    )
);

以这种方式创建导航会强制您在Bootstrap中创建导航并为动态内容创建页面。对于诸如'/ @ news / @ read /:id'之类的路由,您需要创建单独的导航条目。但这会产生很大的问题,因为创建动态内容的最佳位置是控制器,但是您无法在控制器中创建它,因为您无法在控制器插件之前从控制器运行代码,您可以使用导航获取有关页面权限和资源的信息。 / p>

因此,您可以为每个动态内容(例如新闻,博客,cms模块)创建控制器插件,这不是一个糟糕的选择。

这种方法的优点: 您已经有了导航树(动态创建),您可以使用工具确定每个页面的权限,acl检查在一个地方(不是在每个控制器中,或者在每个操作中都更糟)。

重要的是:acl检查需要在preDispatch之前或之前完成,之后调度该点操作而不进行acl检查。

相关问题