代码之家  ›  专栏  ›  技术社区  ›  easement

角色可访问的Drupal节

  •  1
  • easement  · 技术社区  · 15 年前

    我需要根据Drupal用户的角色限制对Drupal站点内容的访问。

    http://site.com/managers/intro

    http://site.com/managers/reviews

    http://site.com/managers/up-for-raises

    内容可以是多种内容类型,并且不限于一种特定的内容类型。这些内容类型将在网站的其他地方使用,因此我无法锁定整个内容类型。

    当所有节点/视图被创建时,我可以通过菜单设置让它们活在这些地址上,但我不知道如何限制通过template.php中的一系列预处理函数以外的角色访问,但这似乎是错误的方法。

    我搜索了一个模块并询问了Drupal支持IRC,但是没有发现使用Drupal角色作为限制因素的结果。

    4 回复  |  直到 9 年前
        1
  •  1
  •   mac    15 年前

    如果我做对了,你要做的就是让特定的角色能够访问位于给定URL的页面。

    通过使用控制访问模块

    正如McLittenden已经提到的,有一个 plethora of modules 这允许您调整内容访问。其中, content access 当然可以做您想做的,因为它允许您分别为每个节点设置权限。

    通过使用标志+视图

    另一种不需要编码就可以做到这一点的方法是 flag module 这个 views module . 以下是我将如何做的简要概述:

    1. 创建三个标志,可用于标记内容(任何类型的内容!)必须在问题中指定的任何地址查看(例如:创建一个标记“intro”,用于标记必须在页面上显示的节点“/mangers/intro”)。
    2. 创建3个视图(每个在问题中列出的地址对应一个视图),通过根据标记筛选节点,将它们从数据库中拉出所需的节点。
    3. 根据角色设置这些视图的权限。

    通过编写一个模块来检查URI并阻止未经授权的用户

    你一定能做到。主要的优点是它在CPU和内存负载方面是一个非常轻量的解决方案,但是有一些问题你必须注意。例如,您可以始终通过URL以 http://example.com/node/nodenumber ,因此您还必须检查URL的别名。但用户可能会附加一个伪 ?某物 到URL,您必须编写 正则表达式 考虑到这种情况…

    (还有 rules module 麦克里滕登给出的是一个很好的答案,但我没有提到它,因为我认为只有当我读到他的答案时。

    希望这有帮助!

        2
  •  4
  •   Pierre.Vriens Krzysztof J    9 年前

    尽管这是一个古老的问题, Path Access 模块现在正是这样做的。以下是其项目页面的摘录:

    …为站点管理员提供对Drupal站点所有页面的额外访问控制层。

    好处:尽管许多Drupal模块提供了一定程度的访问控制权限,但它从未涵盖用户的所有可能需求。路径访问提供了根据页面的路径别名限制页面的方法,这意味着您可以使用通配符从网站的整个部分锁定某些用户角色组。

        3
  •  2
  •   mac    13 年前

    在我看来,如果“经理”总是在该部分的URL中,那么您可以编写一个使用 hook_init 基本上说,如果当前用户的角色不是这些指定的角色之一,并且URL包含“/managers/”,那么drupal_goto()登录页面。

    您也可以使用规则模块很容易地完成这项工作,但是如果这是您唯一使用规则的地方,那么它就不值得了。

    节点模块也有大量的访问权限(比如所有事情的节点访问),但这些访问权限也可能会更大,因此完成这样一个简单的任务是值得的。

        4
  •  0
  •   Grayside    15 年前

    你也可以调查 Menu Access ,它允许您在角色和菜单或角色和菜单树之间关联访问。(请记住,在Drupal中,“菜单路由器”表不仅神秘地是UI,而且神秘地是将每一个内容连接到一个URL的流量路由器。)

    因为所有项都与菜单项关联,所以您不存在路径别名不一定是通用的问题。您还可以使用以下模块: Menu Block 模仿书籍导航。

    这个模块看起来更接近于alpha或beta版本,尽管它是完整的和推荐的状态,所以在生产站点上要小心。