【问题标题】:Drupal how to have certain admins only see the users they've createdDrupal 如何让某些管理员只看到他们创建的用户
【发布时间】:2014-10-11 03:03:24
【问题描述】:

我使用 Drupal 7 并且更愿意这样做,但如果我需要使用 Drupal 6,我会这样做。我有一个 Drupal 7 站点,我允许“顾问”创建经过身份验证的用户。我是该网站的管理员,所以我可以看到并且可以做任何事情。 “顾问”所能做的就是创建和编辑经过身份验证的用户。有没有办法制作一个视图来显示特定顾问在登录时创建的用户?

如果你不明白我在说什么,让我这样说。我是网站的管理员,所以我可以做任何事情。我创建了一个名为顾问的用户角色。用户还有一个经过身份验证的角色。顾问可以创建经过身份验证的用户。所以我有顾问 1。顾问 1 创建了 10 个用户。我也有顾问 2。顾问 2 创建了 3 个用户。我想要一个页面(很可能是用视图构建的——而且我之前在其他网站上使用过视图,所以我很熟悉它们)——我想要一个顾问 1 登录后可以访问的页面将显示他们创建的所有 10 个用户。顾问 1 看不到顾问 2 创建的用户。

这可能吗?对此的任何帮助将不胜感激。提前谢谢你。

【问题讨论】:

  • 这当然需要构建具有自定义权限的自定义功能。没有提供开箱即用功能的此类功能或模块。

标签: drupal drupal-7 drupal-6 profiles


【解决方案1】:

我已经实现了类似的东西,我可以给你一些指导。 首先drupal 7 不存储用户创建者的信息。 因此,为了跟踪这一点,您需要向用户附加一个自定义字段以保留此信息。

在这种情况下,您必须确保每个创建者都只能在此字段中插入他自己,而不是其他任何人,否则您必须找到一种自动填写的方法。 我建议您使用field permission module 设置该字段的权限(用户可能甚至不应该有视图,创建者不应该能够更改它等)和computed field module 在创建时自动填充字段(例如creator_field),例如创建者的 uid。

最后,在创建视图时,您可以使用 creator_field 上的登录用户添加上下文过滤。

您还应该看看有机组。我没用过,但可能有用

希望对你有帮助。

更新

添加

  global $user;
  $entity_field[0]['value'] = $user -> uid;

到计算字段设置中的计算代码 (PHP) 并将值作为整数存储在“数据库存储设置”中。然后在您的视图中,您应该添加一个带有 creator_field 上下文过滤器的用户视图。在上下文过滤器设置中,您必须在“当过滤器值不在 URL 中”部分中设置“提供默认值”->“来自登录用户的用户 ID”。

【讨论】:

  • 谢谢,有道理。我会试一试,然后告诉你进展如何。
  • 好的 geoandri(或任何人),我需要一些帮助。正如您所说,我已经添加了计算字段,但是我将在名为“creator_field”的新字段中的“计算代码(PHP)”字段和“显示代码(PHP)”字段中添加什么。查看此屏幕截图,您将看到 Drupal 默认放在那里的内容。 michaeljbaran.com/field-setting.jpg
  • 尝试全局 $user; $entity_field[0]['value'] = $user -> uid;在计算代码中并将“数据库存储设置”设置为整数。我也会把它添加到我的帖子中
  • 好的,我发现我所做的有一个错误,想知道是否有人可以提供帮助。所以我有一个计算字段隐藏在我的网站上显示。我想将创建它的管理员绑定到新用户帐户。这个计算字段称为“creator_field”,我有计算代码 (PHP) 全局 $user; $entity_field[0]['value'] = $user -> uid;我有显示代码 (PHP) $display_output = $entity_field_item['value'];
  • 这可以满足我的要求,但如果另一个管理员(我们称他为 admin2)要编辑 admin1 创建的新用户(我们称新用户帐户 Bob),而不是用户帐户Bob 将属于 admin2 的用户列表,因为他们对其进行了编辑。我确信有任何简单的解决方法,我就是想不通。有人有想法么?非常感谢,新年快乐!
【解决方案2】:

这可以在 Drupal 7 中相对容易地完成,方法是向用户配置文件添加一个指向用户创建者的字段(使用 Entity Reference 模块)。 Profile2 可以提供使该字段在配置文件中可用的快捷方式,但如果这是您需要添加到配置文件的唯一自定义,那么在自定义模块中执行此操作会更简洁。

可以将视图 (Views module) 配置为以当前登录用户为创建者输出用户列表。

您还需要为 user_access 添加类似的逻辑以允许/限制配置文件编辑(如果当前用户是配置文件中引用的用户)。如果您计划拥有不同的管理员级别,权限挂钩也可能很有用。

Tokens 模块应该通过将当前用户插入字段来为新用户插入此值。或者您可以在保存用户之前执行此操作。它会有点像这样:

function mymodule_user_presave(&$edit, $account, $category) {
  if ($account->is_new) {
    global $user; 
    $created_by = $user->uid; 
    $edit['created_by'] = $created_by;
  }
}

祝你好运。

【讨论】:

  • 在我下面对 geoandri 的评论中,我尝试了你建议的 baaj 并且只有一件事,我怎么才能让这个新字段自动填充创作者 ID?我尝试了几种不同的方法,但都没有成功。只要我能完成它,我真的不在乎我如何完成它:)
  • 更新了我的答案以解决您的上述问题
猜你喜欢
  • 1970-01-01
  • 2020-02-26
  • 2019-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多