0

Drupal 6

我正在尝试使匿名用户可以访问一些概述页面,但是如果他们单击任何其他菜单项,他们将被带到登录页面。现在我的网站设置方式,使用“角色的节点隐私”模块,我可以根据用户是否匿名来限制内容,但如果菜单项受到限制,我不能让菜单项可见。如果我将一个节点设置为匿名用户无法访问,它就会从菜单中消失。

有谁知道是否有办法限制匿名用户访问某些菜单项,但让菜单项在菜单中可见,以便当他们点击它们时,他们会被发送到登录页面?

4

2 回答 2

2

希望以下链接可以帮助你.. :)

https://drupal.org/node/300607

https://drupal.stackexchange.com/questions/51523/content-access-module-hiding-menu-links

于 2013-06-26T02:38:33.303 回答
0

虽然这个问题很老,并且 OP 要求 Drupal 6,但我将为 Drupal 7、8 和 9 回答这个问题,因为它是 Google 上的首批结果之一。

遵循本指南时,它将与Drupal 8 和 9兼容,但如果您想找到Drupal 7的答案,请转到帖子底部。

redirect_anonymous_users.services.yml首先,在模块文件夹中注册事件订阅者:

services:
  redirect_anonymous_users.event_subscriber:
    class: Drupal\redirect_anonymous_users\EventSubscriber\RedirectAnonymousSubscriber
    arguments: []
    tags:
      - {name: event_subscriber}

/src/EventSubscriber/然后在文件夹中的模块中为您的自定义事件订阅者添加 RedirectAnonymousSubscriber.php 。

namespace Drupal\redirect_anonymous_users\EventSubscriber;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;

/**
 * Event subscriber subscribing to KernelEvents::REQUEST.
 */
class RedirectAnonymousSubscriber implements EventSubscriberInterface {

  public function checkAuthStatus(GetResponseEvent $event) {
    if (
      \Drupal::currentUser()->isAnonymous() &&
      \Drupal::routeMatch()->getRouteName() != 'user.login'
    ) {
      $response = new RedirectResponse('/user/login', 302);
      $response->send();
    }
  }

  /**
   * {@inheritDoc}
   */
  public static function getSubscribedEvents() {
    $events[KernelEvents::REQUEST][] = array('checkAuthStatus');

    return $events;
  }

}

现在对于Drupal 7,继续并替换此行:

$response->send();

这些行:

$event->setResponse($response);
$event->stopPropagation();
于 2021-11-02T08:25:14.300 回答