📜  drupal 9 路由的自定义访问检查 - PHP (1)

📅  最后修改于: 2023-12-03 15:00:32.777000             🧑  作者: Mango

Drupal 9 路由的自定义访问检查 - PHP

在 Drupal 9 中,路由是一种定义 URL 到控制器中操作的映射的方法。自定义访问检查是一种方式,用于针对某些路由设置访问限制,以确保只有经过身份验证的用户才可以访问该路由。本教程将介绍如何通过 Drupal 9 路由实现自定义访问检查。

创建一个自定义访问检查器

要创建一个自定义访问检查器,需要实现 AccessInterface 接口。该接口定义了一个名为 access 的方法,该方法接受一个 RouteInterface 对象,并返回一个 AccessResultInterface 对象。该 AccessResultInterface 接口包含一个 isAllowed 方法,该方法返回一个布尔值,指示用户是否允许访问路由。

以下是示例自定义访问检查器的代码:

<?php

namespace Drupal\my_module\Access;

use Drupal\Core\Access\AccessResult;
use Drupal\Core\Routing\Access\AccessInterface;
use Drupal\Core\Session\AccountInterface;
use Symfony\Component\Routing\Route;

class MyCustomAccessCheck implements AccessInterface {

  public function access(Route $route, AccountInterface $account, $custom_value = NULL) {
    // Code logic here to check custom access condition
    if ($custom_value == TRUE) {
      return AccessResult::allowed();
    }
    else {
      return AccessResult::forbidden();
    }
  }

}
声明自定义访问检查器

要在 Drupal 中使用自定义访问检查器,需要使用 services.yml 文件将其声明为服务。以下是一个示例 services.yml 文件的代码:

services:
  my_module.access_check.my_custom_access_check:
    class: Drupal\my_module\Access\MyCustomAccessCheck
    tags:
      - { name: access_check }

在这个示例 services.yml 文件中,我们将我们的自定义访问检查器声明为名为 my_custom_access_check 的服务,并将其标记为 access_check

将自定义访问检查器应用于路由

要将自定义访问检查器应用于路由,需要在模块中定义该路由。以下是示例路由定义的代码:

my_module.content:
  path: '/my-route'
  defaults:
    _controller: '\Drupal\my_module\Controller\MyController::content'
    _title: 'My Page Title'
  requirements:
    _access: 'my_module.custom_access_check:my_custom_access_check'
  options:
    parameters:
      custom_value:
        type: string

在这个示例路由定义中,我们使用 my_custom_access_check 作为访问限制器,并将 custom_value 传递给我们的自定义访问检查器。

结论

通过创建自定义访问检查器和将其应用于路由,我们可以在 Drupal 9 中实现对访问的灵活控制。这对于特定页面或资源需要特定或更高的安全性的应用程序非常有用。