如何在 CakePHP 4 中检查(在模板中)是否 $user->can('access', $request)?
How to check (in template) if $user->can('access', $request) in CakePHP 4?
我在 src/Policy/RequestPolicy.php 中创建了一个 RequestPolicy,只允许“超级管理员”访问我的 SuperRubriquesController 的所有操作用户:
namespace App\Policy;
use Authorization\Policy\RequestPolicyInterface;
use Cake\Http\ServerRequest;
use Authorization\IdentityInterface;
class RequestPolicy implements RequestPolicyInterface
{
/**
* Method to check if the request can be accessed
*
* @param \Authorization\IdentityInterface|null $identity Identity
* @param \Cake\Http\ServerRequest $request Server Request
* @return bool
*/
public function canAccess($identity, ServerRequest $request)
{
if ($request->getParam('controller') === 'SuperRubriques' && $identity) {
return $identity->role === 'super-admin';
}
return true;
}
}
当我转到“/super-rubriques/index”或 SuperRubriquesController 的其他操作时,它工作正常,但我想知道是否有办法检查用户是否可以访问来自模板的请求。
例如,我想检查用户是否可以在显示 link.
之前访问 SuperRubriquesController 的操作索引
if ($this->request->getAttribute('identity')->can('access', $requestToSuperRubriquesIndex)) {
echo $this->Html->link('Super Rubriques', ['controller' => 'SuperRubriques', 'action' => 'index']);
}
如何构建 $requestToSuperRubriquesIndex
?
一种方法是使用当前请求对象的 with*
方法创建具有修改数据的克隆:
$requestToSuperRubriquesIndex = $this->request
->withParam('controller', 'SuperRubriques')
->withParam('action', 'index');
另见
我在 src/Policy/RequestPolicy.php 中创建了一个 RequestPolicy,只允许“超级管理员”访问我的 SuperRubriquesController 的所有操作用户:
namespace App\Policy;
use Authorization\Policy\RequestPolicyInterface;
use Cake\Http\ServerRequest;
use Authorization\IdentityInterface;
class RequestPolicy implements RequestPolicyInterface
{
/**
* Method to check if the request can be accessed
*
* @param \Authorization\IdentityInterface|null $identity Identity
* @param \Cake\Http\ServerRequest $request Server Request
* @return bool
*/
public function canAccess($identity, ServerRequest $request)
{
if ($request->getParam('controller') === 'SuperRubriques' && $identity) {
return $identity->role === 'super-admin';
}
return true;
}
}
当我转到“/super-rubriques/index”或 SuperRubriquesController 的其他操作时,它工作正常,但我想知道是否有办法检查用户是否可以访问来自模板的请求。 例如,我想检查用户是否可以在显示 link.
之前访问 SuperRubriquesController 的操作索引if ($this->request->getAttribute('identity')->can('access', $requestToSuperRubriquesIndex)) {
echo $this->Html->link('Super Rubriques', ['controller' => 'SuperRubriques', 'action' => 'index']);
}
如何构建 $requestToSuperRubriquesIndex
?
一种方法是使用当前请求对象的 with*
方法创建具有修改数据的克隆:
$requestToSuperRubriquesIndex = $this->request
->withParam('controller', 'SuperRubriques')
->withParam('action', 'index');
另见