Zend Framework 2 - BjyAuthorize总是拒绝访问

时间:2013-03-11 16:28:09

标签: zend-framework2 bjyauthorize

我已设置bjyoungblood/bjy-authorize模块,但我目前正在为每个网址收到403“拒绝访问”错误,但home路由中配置的除外。

我的module.byjauthorize.global.php如下:

'bjyauthorize' => array(
    'guards' => array(
        'BjyAuthorize\Guard\Controller' => array(
            array('controller' => 'index', 'action' => 'index', 'roles' => array('guest','user')),
            array('controller' => 'index', 'action' => 'stuff', 'roles' => array('user')),
            array('controller' => 'zfcuser', 'roles' => array()),
            //backend
            array('controller' => 'Application\Controller\Index', 'roles' => array('admin')),
            array('controller' => 'MyModule\MyEntity\MyEntity', 'roles' => array('admin')),

        ),

        'BjyAuthorize\Guard\Route' => array(
            array('route' => 'zfcuser', 'roles' => array('user')),
            array('route' => 'zfcuser/logout', 'roles' => array('user')),
            array('route' => 'zfcuser/login', 'roles' => array('guest')),
            array('route' => 'zfcuser/register', 'roles' => array('guest')),                
            array('route' => 'home', 'roles' => array('admin')),
            array('route' => 'my-entity', 'roles' => array('admin')),
        ),
    ),
),

我尝试删除BjyAuthorize\Guard\Route部分,但没有效果。 当我删除home路由时,主页也会被阻止。 因此,Controller-和Route-Guard似乎都能正常工作。 我该如何调试此行为?

3 个答案:

答案 0 :(得分:10)

注意 :以下内容适用于BjyAuthorize 1.2.*

首先,考虑保护路由和控制器是不必要的。我个人总是只保护控制器,因为可能有多条路由到同一个控制器。

删除路线或控制器警卫的配置后,您可以:

  • 安装Zend Developer Tools,可让您概览当前设置的Acl role,如下图所示:

    enter image description here

  • 检查您是否配置了正确的身份提供者:默认身份提供者使用ZfcUser的用户ID,并在user_role表中查找他的角色。

  • 检查guest角色是否有权访问公共页面,例如zfcuser控制器(用于登录操作)或zfcuser/login路由。

正如Akrabat指出的那样,BjyAuthorize\Guard\ControllerBjyAuthorize\Guard\Route的配置为whitelists,这基本上意味着如果您必须设置默认guest角色的访问权限想要浏览未经过身份验证的页面。

一旦配置了防护,它就会阻止访问任何未配置的资源,因此请确保您已授予角色guest(或者您在$config['bjyauthorize']['default_role']访问时配置的任何内容,至少登录控制器或路线。

答案 1 :(得分:4)

只要在'BjyAuthorize\Guard\Controller'数组中创建一个条目,就需要根据需要为每个控制器创建具有权限的条目。

我有这个:

'BjyAuthorize\Guard\Controller' => array(
    // Access for everyone
    array('controller' => 'zfcuser', 'roles' => array('guest')),
    array('controller' => 'Application\Controller\Index', 'action' => 'index', 'roles' => array('guest')),
    array('controller' => 'error', 'roles' => array('guest')),

    // Restricted
    array('controller' => 'User\Controller\AdminUser', 'roles' => array('admin')),

),

让访客访问zfuser(用于登录!)和错误(否则很难调试内容)非常重要。

我没有尝试过同时使用控制器和路线防护装置。

答案 2 :(得分:1)

我有完全相同的问题。

我认为问题在于BjyAuthorize没有很好地记录,所以我们很多人只是简单地复制和粘贴并从提供的文件中解决问题。例如,来自以下内容:

'BjyAuthorize\Guard\Controller' => array(
            array('controller' => 'zfcuser', 'roles' => array()),
        ),

您可能希望添加控制器:

array('controller' => 'controllername', 'role' => array()),

但是你需要添加完整路径,否则它将无效:

array('controller' => 'Folder/Controller/Action', 'role' => array()),

我希望这可以节省一些人工作几个小时,因为我对此感到非常困惑!