Zend framework2 Zend Framework 2当前资源名称
我目前正在构建自己的ACL,我想知道如何获取当前资源的名称。您负责在系统中设置资源ID/资源名称 一种方法是实现资源接口 这只有一个方法getResourceId(),该方法将为相关资源返回唯一标识符 一个简单的例子是有一个控制器,它将根据控制器/操作名称创建它的资源名称/id。显然,这是一个简单的例子,模块之间可能会有冲突,但这是一个简单的例子Zend framework2 Zend Framework 2当前资源名称,zend-framework2,Zend Framework2,我目前正在构建自己的ACL,我想知道如何获取当前资源的名称。您负责在系统中设置资源ID/资源名称 一种方法是实现资源接口 这只有一个方法getResourceId(),该方法将为相关资源返回唯一标识符 一个简单的例子是有一个控制器,它将根据控制器/操作名称创建它的资源名称/id。显然,这是一个简单的例子,模块之间可能会有冲突,但这是一个简单的例子 class AclController extends AbstractActionController implements ResourceInt
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”最接近的概念是:
- 路线名称
- 控制器名称(在控制器管理器服务定位器中定义)
controller/%controller_name%:%action_name
controller/%controller_name%:%http_method
controller/%controller_name%
而路由具有以下语法:
route/%route_name%
BjyAuthorize仅在缺少资源时默默失败(通过捕获,但当资源存在时,它是通过配置手动输入的,正如Andrew所说。Resources不是魔术,你可以自己定义它们。这取决于你如何命名这些资源。Resources可以是名称,可以与controllernames、routenames等进行匹配。也许可以查看BjyaAuthorize以了解其他资源是如何命名的。)这是一个很棒的模块