Drupal7 根据用户组织过滤可见的网络表单

Posted

技术标签:

【中文标题】Drupal7 根据用户组织过滤可见的网络表单【英文标题】:Drupal7 Filter visible webforms based on user organization 【发布时间】:2016-06-09 14:15:20 【问题描述】:

我们有一个 Drupal 7 站点。

我们有一个“用户 X”,在他们注册时选择了他们所属的组织;组织字段。但请注意,这不是一个角色 - 就像他们选择了他们所属的公司名称一样。

我们通过表单字段之一中的数据值将 Web 表单分配给不同的组织(同样是公司,而不是角色);组织领域。 “用户 Y”将此数据值分配给网络表单。

我们需要按组织字段过滤“用户 X”可以看到的网络表单。

过滤器将是注册时选择的组织“用户 X”,与“用户 Y”在网络表单的组织字段中输入的数据进行比较。

如何使这个过滤器起作用?如何过滤网络表单“用户 X”可以看到的内容?

【问题讨论】:

简单的答案是将组织变成角色。然后每个 Webform 都可以拥有基于 Role 的权限。 “组织”位于表单的下拉列表中,供“用户 Y”设置。如果用户由于其权限级别而无权访问该角色,您如何将角色放入下拉列表中进行选择?例如,“用户 Y”将无权访问“角色 5”,因此无法在列表中看到它,不是吗? 对,默认情况下,Drupal 的 Permissions on Permissions 不是很精细。授予人们管理自己角色的权利将使他们能够访问所有权限。但是,有一个名为“角色委派”的轻量级模块,它允许您授予人们更改或分配角色的访问权限,而无需给予他们完整的权限。您可以制定规则,允许一个组织中的人员分配某些角色,但不允许分配其他角色。抱歉,如果我不理解您的问题。我知道我在提供替代建议而不是确切答案。 不是权限上的权限。 Org,在这种情况下就像“公司名称”,所以只是我们的命名法有点混淆了这个问题。因此,我只想通过将分配的公司名称与查看者的公司名称匹配来过滤您可以看到的网络表单。我会更新 OP 【参考方案1】:

我认为您需要为每个表单编写一个 hook_menu access_callback 来检查用户是否在特定组织中。如果有一些命名约定允许您对所有表单使用相同的菜单挂钩,这将对您有所帮助,例如:

$form_id = 'form_org_1' 

$user->org = 'org_1'

但情况可能并非如此。希望没有太多的表单/组织。

【讨论】:

以上是关于Drupal7 根据用户组织过滤可见的网络表单的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP 3.x 根据用户组/组织/团队过滤查询结果

根据 MS Access 中的用户过滤子表单

如何在 Drupal 7 中创建一个仅显示基于当前用户字段的过滤列表的视图

Drupal 7 - 具有关系和过滤器问题的视图

遍历用户表单中的所有组合框并使用名称进行验证并使它们可见

如何在drupal 7中根据分类术语搜索用户列表?