Authentication CakePhp4使用新的身份验证实现不推荐的Controller::isAuthorized()&;授权插件

Authentication CakePhp4使用新的身份验证实现不推荐的Controller::isAuthorized()&;授权插件,authentication,authorization,cakephp-4.x,Authentication,Authorization,Cakephp 4.x,我正在寻找如何使用新的身份验证和授权插件实现不推荐的控制器::isAuthorized(),但我找不到方法 例如,在由RequestAuthorizationMiddleware调用的方法RequestPolicyInterface::canAccess()中,我无法获取当前控制器的实例 有什么想法吗 谢谢。策略应用于并接收资源,请求策略应用于请求,并将相应地接收当前请求对象,以及策略始终接收的当前标识 在这种情况下,canAccess方法的特定签名是: canAccess(\Authoriza

我正在寻找如何使用新的
身份验证
授权
插件实现不推荐的
控制器::isAuthorized()
,但我找不到方法

例如,在由
RequestAuthorizationMiddleware
调用的方法
RequestPolicyInterface::canAccess()
中,我无法获取当前控制器的实例

有什么想法吗


谢谢。

策略应用于并接收资源,请求策略应用于请求,并将相应地接收当前请求对象,以及策略始终接收的当前标识

在这种情况下,
canAccess
方法的特定签名是:

canAccess(\Authorization\IdentityInterface $identity, \Cake\Http\ServerRequest $request)
例如,该方法将在第二个参数中接收当前请求,您可以从请求参数中获取路由信息:

public函数可以访问($identity,ServerRequest$request)
{
如果(
!$request->getParam('插件')&&
!$request->getParam('前缀')&&
$request->getParam('controller')=='Articles'
) {
返回$identity->role->name=='admin';
}
返回true;
}
这将只允许角色为
admin
的用户访问(非插件/前缀)
文章
控制器,并允许任何人访问所有其他控制器

请注意,您不会收到控制器的实例,因为该特定检查a)不是针对控制器对象进行的,而是针对请求对象进行的,b)甚至在控制器实例化之前发生

另见


非常感谢您的回答,这是我在阅读文档时理解的。但由于开发人员的习惯,我一直在寻找一种方法来重现旧的
Controller::isAuthorized()
way。。。