我已经设置了bjyoungblood/bjy-authorize模块,但是除403路由中配置的URL之外,每个URL当前都出现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路线时,主页也会被阻止。
因此,控制器和Route-Guard似乎都可以工作。
如何调试此行为?

最佳答案

注意:以下内容对BjyAuthorize 1.2.*有效

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

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


安装Zend Developer Tools,使您可以大致了解当前设置的Acl role,如下图所示:


检查您是否配置了正确的身份提供者:默认的身份提供者使用ZfcUser的用户ID并在user_role表中查找其角色。
检查guest角色是否有权访问公共页面,例如zfcuser控制器(用于登录操作)或zfcuser/login路由。


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

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

08-06 23:22