当前位置: 首页>>技术问答>>正文


如何找到user_access($string)函数的可用$字符串值列表?

webfans 技术问答 , 去评论

问题描述

user_access($string, $account = NULL)

$string: The permission, such as “administer nodes”, being checked for.

如何查找user_access()函数的可用$ string值列表?

最佳解决方法

只要每个模块都可以定义自己的权限,就没有这些字符串的”strict”列表。如果你真的需要以编程方式拥有这样的列表,你将需要”construct”它。

您可以在/devel /php页面中运行此脚本。 (当然,您需要Devel模块。)

// Render role/permission overview:
$options = array();
foreach (module_list(FALSE, FALSE, TRUE) as $module) {
  print_r($module);
  // Drupal 6
  // if ($permissions = module_invoke($module, 'perm')) {
  //  print_r($permissions);
  // }

  // Drupal 7
  if ($permissions = module_invoke($module, 'permission')) {
    print_r($permissions);
  }
}

次佳解决方法

正如@Berdir所说,查看哪些权限可用的最简单方法是转到Drupal 7中的权限admin /people /permissions。

我一直遇到的问题是我永远无法弄清楚我需要提供什么字符串作为’access argument’来实际使用权限。好吧,以下是您要查找要使用的权限的字符串名称的方法(此示例使用Google Chrome。)

步骤1。转到admin /people /permissions找到您要使用的权限,然后右键单击要使用的权限右侧的复选框。选择’Inspect Element’或者只是查看源代码。

users,drupal

接下来查看复选框的值并记下值。 (在这种情况下,字符串是’创建优惠券内容’)

users,drupal

这是您需要在hook_menu()中作为访问参数提供的字符串

示例代码:(删除了non-relevant项目,不要忘记hook_menu()中的标题,回调等)

function fsrsys_menu() {
    $items = array();
    $items['my-custom-url'] = array(
        'access callback' => 'user_access',
        'access arguments' => array('create coupon content'),
    );
    return $items;
}

第三种解决方法

这是Haza答案的D7版本,修改为使用DSM而不是print_r,并省略了未实现hook_permission的模块:

// Render permission overview:
$options = array();
foreach (module_list(FALSE, FALSE, TRUE) as $module) {
  if ($permissions = module_invoke($module, 'permission')) {
    // List only the modules that have permissions.
    dsm($module);
    dsm($permissions);
  }
}

第四种方法

您可以使用user_permission_get_modules()函数,该函数返回所有已定义权限及其模块的数组。

Determine the modules that permissions belong to.

Return value

An associative array in the format $permission => $module.

第五种方法

最简单的方法是检查权限页面(D7:admin /people /permissions,D6:admin /user /permissions)。请注意,您直接使用Drupal 6中显示的字符串,对于7,您需要查看复选框名称/值。这是因为权限现在在Drupal 7中具有翻译的标题和描述。

因此,如果您想要Drupal 7中“查看已发布内容”权限的名称,则值为”access content”,这是您的权限名称。

如果您知道权限来自哪个模块,您还可以检查该模块的相应hook_perm()(D6)/hook_pemission()(D7)实现。

在许多情况下,您想要定义自己的权限并使用它们,您可以使用上述钩子来实现。

第六种方法

使用Devel模块

  • 安装并启用Devel模块后,导航至admin/config/development/devel。有一个标题为“显示权限和模块的机器名称”的设置。确保选中。

  • 现在,在people/permissions的权限页面上,将鼠标悬停在您正在质疑的权限名称上。它可能会延迟一两秒,但随后会显示字符串值。

参考资料

本文由朵颐IT整理自网络, 文章地址: https://duoyit.com/article/2081.html,转载请务必附带本地址声明。