Zend framework2 Zend Framework 2当前资源名称

Zend framework2 Zend Framework 2当前资源名称,zend-framework2,Zend Framework2,我目前正在构建自己的ACL,我想知道如何获取当前资源的名称。您负责在系统中设置资源ID/资源名称 一种方法是实现资源接口 这只有一个方法getResourceId(),该方法将为相关资源返回唯一标识符 一个简单的例子是有一个控制器,它将根据控制器/操作名称创建它的资源名称/id。显然,这是一个简单的例子,模块之间可能会有冲突,但这是一个简单的例子 class AclController extends AbstractActionController implements ResourceInt

我目前正在构建自己的ACL,我想知道如何获取当前资源的名称。

您负责在系统中设置资源ID/资源名称

一种方法是实现资源接口

这只有一个方法getResourceId(),该方法将为相关资源返回唯一标识符

一个简单的例子是有一个控制器,它将根据控制器/操作名称创建它的资源名称/id。显然,这是一个简单的例子,模块之间可能会有冲突,但这是一个简单的例子

class AclController extends AbstractActionController implements ResourceInterface
{
    /**
     * Returns the string identifier of the Resource.
     * By default we'll just use controller/action
     * 
     * e.g. mvc:index/index
     *
     * @return string
     */
    public function getResourceId()
    {
        //$request = $this->getRequest();
        /* @var $request \Zend\Http\PhpEnvironment\Request */
        $routeMatch = $this->getEvent()->getRouteMatch();
        /* @var $routeMatch \Zend\Mvc\Router\Http\RouteMatch */
        $controller = $routeMatch->getParam('controller', 'noaccess');
        $action = $routeMatch->getParam('action', 'noaccess');

        return 'mcv:' . $controller . '/' . $action;
    }
}
然后,您可以使用直接与ACL实现ResourceInterface的任何对象

// resource can be any object implementing the interface
$acl->addResource($resource);
,负责建筑的是你。MVC层本身没有“Acl资源ID”的概念

正如@Sam所说,你可能想看看BjyAuthorize是如何做到的

与zend framework 2中的“资源ID”最接近的概念是:

  • 路线名称
  • 控制器名称(在控制器管理器服务定位器中定义)
这些都是在配置中定义的内容,也可以从配置中读取

不会自动读取资源名称,但它会在所谓的“”和“”中抽象资源名称(请求访问时),这是保护应用程序不受不必要访问的“防火墙”

在控制器保护中,每个控制器资源ID看起来像以下之一:

controller/%controller_name%:%action_name
controller/%controller_name%:%http_method
controller/%controller_name%
而路由具有以下语法:

route/%route_name%

BjyAuthorize仅在缺少资源时默默失败(通过捕获,但当资源存在时,它是通过配置手动输入的,正如Andrew所说。

Resources不是魔术,你可以自己定义它们。这取决于你如何命名这些资源。Resources可以是名称,可以与controllernames、routenames等进行匹配。也许可以查看BjyaAuthorize以了解其他资源是如何命名的。)这是一个很棒的模块