📅  最后修改于: 2023-12-03 15:00:32.777000             🧑  作者: Mango
在 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 中实现对访问的灵活控制。这对于特定页面或资源需要特定或更高的安全性的应用程序非常有用。