视图模块:如何限制用户访问


8

我正在使用“视图”模块创建仅特定用户应该可以访问的视图。我知道View包含按角色或权限进行的访问控制,但是我需要更细粒度的说明:基本上,我希望能够说只有用户“ x”和用户“ y”可以访问特定的视图(否则,网站管理员角色)。因此,其功能与ACL模块对单个节点的作用非常相似。

创建自定义视图访问插件的最佳方法是吗?我对此没有太多经验。

另外,我想知道如何使用带有验证的参数来完成此操作(这样就不必创建数十个单独的视图)。例如,由于此视图将是特定节点路径上的选项卡,所以我想知道在该节点上设置一个用户引用字段,该字段指定谁可以看到该视图。我只需要一种方法使视图仅在当前用户等于用户参考字段中指定的用户时进行验证。

有任何想法吗?还是我使它变得比它需要的复杂?

谢谢,本


您可能必须编写一个Views Access插件,但是如果您可以更详细地更新问题,那么也许可以用另一种方式来实现。视图执行/显示什么?哪些用户可以查看?用户有不同的角色吗?用户是否具有特定的字段或与之相关联的东西以允许他们访问?
杰米·霍林

杰米,谢谢你的答复。实际上,我也在使用Drupal Commerce创建一种独特的在线商店。作为每个产品节点上的标签(除了“查看”和“编辑”标签之外),我想创建一个名为“订单”的附加标签,该标签将显示包含该特定产品的所有订单的视图。特定产品的供应商是我希望能够看到该产品的“订单”视图的用户。

这样,供应商可以持续监控其产品的销售。但是我不想授予具有“供应商”角色的每个人访问权限,因为这样任何供应商都可以查看其他供应商产品的销售情况。合理?;-) --Ben
BenK 2011年

Answers:


5

除了限制视图的权限外,您还可以限制导致该视图的菜单项的权限(它是节点上的选项卡还是菜单回调)。您可以仅使用“默认值”显示而不使用“页面”显示来创建视图(因此用户不能仅找出它的路径)。然后在page callback菜单项中调用views_embed_view即可显示视图。似乎处理菜单项的权限可能比为Views编写新的插件要容易(尽管该插件可能对其他人有所帮助)。


谢谢你的建议!我最终遵循了这种通用方法(Berdir也建议这样做),但是在每个称为field_usercanaccess的节点上创建了一个用户引用字段。我能够使用hook_menu()并定义访问回调,以确保当前用户与该字段中引用的用户匹配。否则,将不会显示选项卡(和视图)。这很棒!:-)
BenK 2011年

@BenK太棒了!我很高兴你有工作。作为使Drupal Answers成为重要资源的一部分,您还应该对发现有用的答案(或问题)进行投票。因此,您可能应该为@Berdir的答案投票(还有我的,但这不是我试图获得投票,而是试图使Drupal Answers成为一个更好的网站)
Chaulky 2011年

谢谢。:-)我是Stack Exchange的新手,我只有13分。当我尝试投票时,它说我需要15分才能投票。因此,如果某人有两点余地(或者我可以通过其他方式赢得它们),我肯定会就答案和问题进行投票。--Ben
BenK 2011年

@BenK哦,对了,我忘了15分的限制。您可以随时尝试回答问题...对答案的一个投票将获得10名代表。
Chaulky 2011年

6

尝试使用Views Access回调模块。

为视图提供基于回调的访问控制。

可用的回调函数由模块使用hook_views_access_callbacks()函数定义(与中的方法相同hook_perm()),然后可以在视图的“访问限制”配置中进行设置。


使用视图访问回调的工作非常好,除了一个奇怪的致命错误。看到这里:drupal.stackexchange.com/questions/3336/…。似乎是要走的路-但是如何解决呢?
Druvision 2014年

2

我必须缺少一些内容,但是听起来您将创建一个新角色并添加这些用户。然后使用“视图的访问权限:角色”功能。

如果确实需要将“访问”权限与内容中的某些内容绑定在一起,则可以使用自定义的“视图”访问权限,我发现第一次设置很麻烦,但是一旦使用起来就很灵活。如果视图正在生成菜单项,则如果视图未通过访问功能,它将不会出现。

如果您只隐藏菜单项,则在我看来该视图仍将运行,并且用户可以调整URI来查看数据。

杰瑞


1

如何使用“ 自定义权限”模块专门为您的目的创建一些新权限,然后使用“ 用户权限”模块将这些新权限分配给各个用户?

自定义权限模块非常轻巧。我对用户权限模块不是很确定,因为它实际上为幕后的每个用户创建了一个新角色(这些角色在主权限页面上不可见)。如果您有很多用户,这可能会增加角色和user_roles表的大小。


使用自定义权限是一个有趣的建议。我从未见过该模块,因为它变得不仅限于“站点配置权限”。唯一的麻烦是,我正在Drupal 7中完成所有这些工作(并且还没有正式的分支机构)。但是,如果我能做到这一点,则有可能直接在视图的访问控制中指定权限(不需要“用户权限”模块)。谢谢你的建议!:-)
BenK

我会尝试一下并报告。

0

是的,这更有意义。我认为您可以(可能不是100%地确定)使用视图和参数。将参数设置为从当前登录用户获取的用户ID,并使默认参数不显示任何内容。那应该能够做到,尽管我不知道公平是多么安全。如果您尝试一下,请发回邮件,让我知道您的进度。


是的,我会尝试一下并报告。我还在尝试使用带参数的视图访问插件,因此我们将看看它的运行情况。谢谢。

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.