Zend Framework 2 - BjyAuthorize总是拒绝访问

Ron*_*Ron 9 zend-framework2 bjyauthorize

我已经设置了bjyoungblood/bjy-authorize模块,但是我正在403为每个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')),
        ),
    ),
),
Run Code Online (Sandbox Code Playgroud)

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

Ocr*_*ius 11

注意:以下内容适用于 BjyAuthorize1.2.*

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

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

  • 安装Zend Developer Tools,它允许您概述当前设置的Acl角色,如下图所示:

    在此输入图像描述

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

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

正如Akrabat指出的那样,BjyAuthorize\Guard\Controller并且BjyAuthorize\Guard\Route白名单的配置,这基本上意味着guest如果要浏览未经过身份验证的页面,则必须设置默认角色的访问权限.

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


Rob*_*len 5

'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')),

),
Run Code Online (Sandbox Code Playgroud)

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

我没有尝试同时使用控制器和路由保护器。