如何在 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');

另见