我需要根据Drupal用户的角色限制对Drupal站点上内容的访问。
http://site.com/managers/intro
http://site.com/managers/reviews
http://site.com/managers/up-for-raises
内容可以是多种内容类型,并且不限于一种特定内容类型。这些内容类型将在网站的其他地方使用,因此我无法锁定整个内容类型。
我可以在创建菜单时通过菜单设置让所有节点/视图都存在这些地址,但是我不知道如何通过除template.php中的一堆预处理函数之外的角色来限制访问,但是这似乎是错误的做法。
我搜索了一个模块并询问#drupal-support IRC,但没有结果使用drupal角色作为限制因素。
答案 0 :(得分:4)
虽然这是一个老问题,但Path Access模块现在正是这样做的。以下是项目页面的摘录:
...为站点管理员提供了对Drupal站点的所有页面的附加访问控制层。
好处:虽然许多Drupal模块提供了一定程度的访问控制权限,但它从未涵盖用户拥有的所有可能要求。 Path_access提供了根据路径别名限制页面的方法 - 这意味着您可以使用通配符从站点的整个部分锁定某些用户角色组。
答案 1 :(得分:2)
在我看来,如果“经理”总是在该部分的URL中,您可以编写一个使用hook_init
的小模块来基本上说当前用户的角色是不是这些指定的角色,url包含“/ managers /”,然后是drupal_goto()登录页面。
您也可以使用规则模块轻松完成这项工作,但如果这是您使用规则的唯一方法,那么它就不值得了。
还有很多按节点访问的模块(例如所有东西的节点访问),但这些也可能需要更多努力来完成这么简单的任务。
答案 2 :(得分:1)
如果我做对了,那么你想要实现的只是让某些角色能够访问位于给定URL的页面。
使用辅助访问模块
正如mcrittenden已经提到的,有plethora of modules允许您调整内容访问。其中,content access肯定可以做你想要的,因为它允许你分别为每个节点设置权限。
使用标记+视图
在没有编码的情况下执行此操作的另一种方法是使用flag module views module的组合。以下是我将如何做的简要概述:
通过编写检查URI和阻止未经授权的用户的模块
你一定可以做到这一点。主要优点是它在CPU和内存负载方面将是一个非常轻量级的解决方案,但是你必须注意一些问题。例如,您始终可以通过网址以 http://example.com/node/nodenumber 的格式访问您的内容,因此您还必须检查其别名的网址。但是,用户可能会在网址上附加虚假?某些这一事实,您必须编写正则表达式以考虑此类情况......
(mcrittenden给出的rules module的想法也很好,但我没有提到它,因为我只是在读到他的答案时才想到它。)
希望这有帮助!
答案 3 :(得分:0)
您还可以调查Menu Access,它允许您关联角色和菜单之间的访问权限,或角色和菜单树。 (请记住,在Drupal中,“菜单路由器”表不仅仅是UI,而且还有将每条内容连接到URL的流量路由器。)
因为所有项都与菜单项相关联,所以您不会遇到路径别名不一定是通用的问题。您还可以使用Menu Block等模块来模拟图书导航。
这个模块似乎更接近于Alpha版或Beta版,尽管它已经完整且完整。推荐状态,所以在生产现场要小心。