有没有一种方法可以避免匿名用户看到特定内容类型的节点?


9

有没有一种方法可以避免匿名用户看到内容类型的节点,例如块或视图?

我可以通过视图控制访问,但是如果我知道节点的链接,则无需先登录就可以看到它。

Answers:


10

您可以在钩子hook_node_access()中控制对节点的访问:

mymodule.module:

use Drupal\node\NodeInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\Access\AccessResult;

function mymodule_node_access(NodeInterface $node, $op, AccountInterface $account) {
  if ($account->isAnonymous() && $node->gettype() == 'article') {
    return AccessResult::forbidden()->cachePerPermissions();
  }
  return AccessResult::neutral()->cachePerPermissions();
}

这控制对节点的直接访问,而不控制视图中的访问。但这就是您可能想要的。


我相信,要同时控制视图中的访问,可以使用hook_node_grants。
乔纳森

4

最好的选择是使用Rabbit RabbitContent Access(它具有更新的发行版)。

兔子洞

Rabbit Hole是一个模块,它增加了控制在其自己的页面上查看实体时应该发生的情况的功能。也许您有一种内容类型,它永远都不应显示在其自己的页面上,例如轮播中显示的图像内容类型。Rabbit Hole可以阻止通过node / xxx在其自己的页面上访问此节点。

内容访问

该模块允许您按角色和作者管理内容类型的权限。它允许您指定每种内容类型的自定义视图,编辑和删除权限。(可选)您可以启用每个内容访问设置,以便可以自定义每个内容节点的访问。

请注意,我相信您想要的是阻止对内容类型的节点的所有访问-并且只有Content Access才能在Rabbit Hole上实现。

除此之外,如果这两种方法都不适合,您可能会考虑实现自己的访问控制。


抱歉,您的答案是Kevin,但是您对Group模块熟悉吗?看一下视频教程,了解我的意思... BTW:对于D7,我还建议使用“内容访问”。
Pierre.Vriens

2
不是因为它是OG。除非有这种需要,否则安装有点笨重吗?
凯文(Kevin)

……因为它是OG ”?你是什​​么意思?关于“沉重”:您是OG(如果我同意)还是Group(如果我不同意)?
Pierre.Vriens

我一直只是以为Group是D8的OG的分支
Kevin

对不起,凯文(事实再次如此)... 了解更多
Pierre.Vriens

1

也许您想尝试使用“ 组”模块,该模块允许在您的站点上创建内容和用户的任意集合,并授予对这些集合的访问控制权限。它自D7起可用,并且还具有D8版本。它将组创建为实体,使其完全可现场使用,可扩展和可导出。每个组都可以具有附加的用户,角色和权限(有关该组的更多详细信息,请参阅“ 组模块支持哪些角色? ”)。

对于此特定问题,您将启用gnode子模块,并针对每种组类型为各种内容类型定义适当的权限(查看,编辑,删除等)。

似乎您想授予对“组”中称为“成员”和“外部人员”(=不是组成员的登录用户)的访问权限。但是您将不允许访问“匿名”(未登录的站点访问者)。

资源资源


1

您可以使用“ 节点视图权限”模块。

启用它,然后您可以在“节点查看权限”部分下的路径“ admin / people / permissions”下分配哪些角色可以查看哪些内容类型

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.