Php 可由角色访问的Drupal部分

Php 可由角色访问的Drupal部分,php,drupal,drupal-6,module,access-control,Php,Drupal,Drupal 6,Module,Access Control,我需要根据Drupal用户的角色限制对Drupal站点上内容的访问 内容可以是多种内容类型,并且不限于一种特定的内容类型。这些内容类型将在网站的其他地方使用,因此我无法锁定整个内容类型 创建节点/视图时,我可以通过菜单设置使所有节点/视图位于这些地址,但我不知道如何通过template.php中的一系列预处理函数以外的角色限制访问,但这似乎是错误的方法 我搜索了一个模块并询问了#drupal support IRC,但没有找到使用drupal角色作为限制因素的结果。在我看来,如果“经理”总

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

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

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


我搜索了一个模块并询问了#drupal support IRC,但没有找到使用drupal角色作为限制因素的结果。

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

您还可以使用规则模块轻松地完成这项工作,但如果这是您使用规则的唯一目的,那么它就不值得了


节点模块也有大量的访问权限(比如所有东西的nodeaccess),但完成这样一个简单的任务可能需要付出更多的努力。

我觉得如果“管理者”总是出现在该部分的URL中,您可以编写一个小模块,它使用
hook_init
基本上说明当前用户的角色不是这些指定角色之一,并且url包含“/managers/”,然后drupal_goto()登录页面

您还可以使用规则模块轻松地完成这项工作,但如果这是您使用规则的唯一目的,那么它就不值得了


节点模块也有大量的访问权限(比如所有东西的nodeaccess),但完成这样一项简单的任务可能需要付出更多的努力。

如果我做对了,您试图实现的是只有某些角色能够访问位于给定URL的页面

使用CONTRIB接入模块

正如mcrittenden已经提到的,有一种方法允许您调整内容访问。其中,您当然可以随心所欲,因为它允许您分别为每个节点设置权限

使用FLAG+视图

另一种不需要编码就可以做到这一点的方法是结合使用。以下是我将如何做的简要概述:

  • 创建三个标志,用于标记必须在问题中指定的任何地址查看的内容(任何类型的内容!)(例如:创建一个标志“intro”,用于标记必须在页面“/管理器/intro”上显示的节点)
  • 创建3个视图(问题中列出的每个地址对应一个视图),通过根据您的标志对节点进行过滤,从数据库中取出所需的节点
  • 根据角色设置这些视图的权限
  • 通过编写一个模块来检查URI并阻止未经授权的用户

    你一定能做到。它的主要优点是,在CPU和内存负载方面,它将是一个非常轻量级的解决方案,但是您必须注意一些问题。例如,您始终可以通过格式的URL访问内容,因此您也必须检查URL的别名。还有一个事实,用户可能会在URL中附加一个伪造的东西,您必须编写正则表达式来考虑这种情况

    (mcrittenden给出的这个想法也是很好的,但我没有提及,因为我只是在阅读他的答案时才想到这一点)


    希望这有帮助

    如果我没弄错的话,您想要实现的是只有某些角色能够访问位于给定URL的页面

    使用CONTRIB接入模块

    正如mcrittenden已经提到的,有一种方法允许您调整内容访问。其中,您当然可以随心所欲,因为它允许您分别为每个节点设置权限

    使用FLAG+视图

    另一种不需要编码就可以做到这一点的方法是结合使用。以下是我将如何做的简要概述:

  • 创建三个标志,用于标记必须在问题中指定的任何地址查看的内容(任何类型的内容!)(例如:创建一个标志“intro”,用于标记必须在页面“/管理器/intro”上显示的节点)
  • 创建3个视图(问题中列出的每个地址对应一个视图),通过根据您的标志对节点进行过滤,从数据库中取出所需的节点
  • 根据角色设置这些视图的权限
  • 通过编写一个模块来检查URI并阻止未经授权的用户

    你一定能做到。它的主要优点是,在CPU和内存负载方面,它将是一个非常轻量级的解决方案,但是您必须注意一些问题。例如,您始终可以通过格式的URL访问内容,因此您也必须检查URL的别名。还有一个事实,用户可能会在URL中附加一个伪造的东西,您必须编写正则表达式来考虑这种情况

    (mcrittenden给出的这个想法也是很好的,但我没有提及,因为我只是在阅读他的答案时才想到这一点)


    希望这有帮助

    您还可以进行调查,这允许您将角色与菜单或角色与菜单树之间的访问关联起来。(请记住,在Drupal中,“菜单路由器”表神秘地不仅是UI,而且是流量路由器,它可以