Drupal 6
我正在尝试使匿名用户可以访问一些概述页面,但是如果他们单击任何其他菜单项,他们将被带到登录页面。现在我的网站设置方式,使用“角色的节点隐私”模块,我可以根据用户是否匿名来限制内容,但如果菜单项受到限制,我不能让菜单项可见。如果我将一个节点设置为匿名用户无法访问,它就会从菜单中消失。
有谁知道是否有办法限制匿名用户访问某些菜单项,但让菜单项在菜单中可见,以便当他们点击它们时,他们会被发送到登录页面?
Drupal 6
我正在尝试使匿名用户可以访问一些概述页面,但是如果他们单击任何其他菜单项,他们将被带到登录页面。现在我的网站设置方式,使用“角色的节点隐私”模块,我可以根据用户是否匿名来限制内容,但如果菜单项受到限制,我不能让菜单项可见。如果我将一个节点设置为匿名用户无法访问,它就会从菜单中消失。
有谁知道是否有办法限制匿名用户访问某些菜单项,但让菜单项在菜单中可见,以便当他们点击它们时,他们会被发送到登录页面?
希望以下链接可以帮助你.. :)
https://drupal.org/node/300607
https://drupal.stackexchange.com/questions/51523/content-access-module-hiding-menu-links
虽然这个问题很老,并且 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();