首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模块路由的自定义访问检查

模块路由的自定义访问检查
EN

Drupal用户
提问于 2019-03-24 19:37:21
回答 1查看 202关注 0票数 0

我正在研究应该表现为API端点的模块。

我创建了Controller,该处理程序从外部系统发送和获取请求,但我需要添加用户身份验证,以便只有经过身份验证的用户才能访问这些端点。

我的mymodule.routing.yml

代码语言:javascript
复制
mymodule.show_content:
  path: 'api/getContent'
  defaults:
    _controller: '\Drupal\mymodule\Controller\ContentController::getContent'
    _format: hal_json
  requirements:
    _method: 'POST'
    _custom_access_check: 'TRUE'

我的mymodule/src/Access/CustomAccessCheck.php

代码语言:javascript
复制
class CustomAccessCheck implements AccessInterface
{
    public function access(AccountInterface $account)
    {
        return ($account->hasPermission('access content')) ? AccessResult::allowed() : AccessResult::forbidden();
    }
}

Mymodule.services.yml:

代码语言:javascript
复制
  mymodule.custom_access_check:
    class: Drupal\mymodule\Access\CustomAccessCheck
    arguments: ['@current_user']
    tags:
      - { name: access_check, applies_to: _custom_access_check }

我用REST角色创建了一个名为REST的用户。我给了他“访问内容”的许可,并试图使用POST方法和以下标题向邮递员提出请求:

代码语言:javascript
复制
{
    Content-Type: application/hal+json,
    Authorization: Basic 
    X-CSRF-Token: token obtained from /rest/session/token
}

当我向admin用户提出请求时,我在最近的日志中看到管理访问路由/api/getContent,但是访问被拒绝。当我使用REST用户时,它会以匿名用户的身份登录。即使当我在CustomAccessCheck::access函数中记录身份验证状态时,我也看到该用户已通过TRUE进行身份验证。

我需要将此身份验证隔离开来(在控制器之外、服务中或其他方面),因为我需要对每个请求进行身份验证(重用auth),这样只有内部用户才能使用API (而不是使用URL的每个人)。我不明白缺少了什么,为什么只有我的管理用户被drupal所识别,而其余的用户不被识别。

EN

回答 1

Drupal用户

发布于 2019-03-29 12:48:18

如果您替换:

代码语言:javascript
复制
requirements:
  _method: 'POST'
  _custom_access_check: 'TRUE'

通过以下方式:

代码语言:javascript
复制
requirements:
  _method: 'POST'
  _permission: 'access content'

然后删除CustomAccessCheck代码

票数 0
EN
页面原文内容由Drupal提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://drupal.stackexchange.com/questions/278160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档