Answers:
只要每个模块都可以定义自己的权限,就没有这些字符串的“严格”列表。如果您确实需要以编程方式拥有这样的列表,则需要“构造”它。
您可以在/ 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权限。
我一直遇到的问题是,我永远无法弄清楚需要提供什么字符串作为“访问参数”才能真正利用权限。好的,这是您找到要使用的权限的字符串名称的方法(此示例使用Google Chrome)。
步骤1。转到admin / people / permissions,找到您要使用的权限,然后右键单击您要使用的权限右侧的复选框。选择“检查元素”或只是查看源代码。
接下来寻找复选框的值并记下该值。(在这种情况下,字符串为“创建优惠券内容”)
这是您需要在hook_menu()中作为访问参数提供的字符串。
示例代码:(删除了不相关的项,不要忘了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()
函数,该函数返回所有已定义权限及其模块的数组。
确定权限所属的模块。
返回值
$ permission => $ module格式的关联数组。
最简单的方法是检查权限页面(D7:admin / people / permissions,D6:admin / user / permissions)。请注意,您直接在Drupal 6中使用显示的字符串,对于7,您需要查看复选框名称/值。这是因为权限现在在Drupal 7中具有翻译的标题和描述。
因此,如果要在Drupal 7中使用权限“查看发布的内容”的名称,则值为“访问内容”,这是您的权限名称。
如果知道许可权来自哪个模块,则还可以检查该模块的相应hook_perm()(D6)/ hook_pemission()(D7)实现。
在许多情况下,您想定义自己的权限并使用这些权限,可以使用上述挂钩进行操作。
使用开发模块
安装并启用Devel模块后,导航至admin/config/development/devel
。有一个标题为“显示权限和模块的计算机名称”的设置。确保已检查。
现在,在的权限页面上people/permissions
,将鼠标悬停在您要查询的权限名称上。可能会延迟一两秒钟,但随后会显示字符串值。
这是一个简单的表单更改,它将在权限页面上的名称中添加权限密钥。那应该使查找起来更容易。您将需要将其添加到自定义模块,并将“ mymodule”替换为该模块的名称。
/**
* Implements hook_form_FORM_ID_alter().
*/
function mymodule_form_user_admin_permissions_alter(&$form, $form_state) {
foreach ($form['permission'] as $key => &$item) {
if (isset($item['#type']) && $item['#type'] == 'item') {
$item['#markup'] .= ' (' . $key . ')';
}
}
}
我创建了这个JavaScript代码段,可以帮助我解决这一问题。我在Drupal 7中仅针对Shiny主题进行了测试。
它基本上将机器名称从该名称的第一个复选框输出到标签下的第一个单元。该脚本依赖jQuery,在Drupal 7上应该不会有问题。
我通常将其粘贴在Developer Tools控制台上并从那里运行。我将来可能会为其创建一个书签。
// Go through each of the rows on the permissin table
rows = jQuery('#permissions tr');
rows.each(function() {
// Get the first checkbox in the row.
checkbox = jQuery('.checkbox .form-checkbox', this).first();
// Get the first cell, containing the permission label.
nameCell = jQuery('td:first-child', this);
// In case this is not a permission row
if(checkbox.length == 0) {
return;
}
// Embed the permission maching name on permission label cell.
nameCell.append("<div><code>" + checkbox.val() + "</code></div>");
});
只需添加一些模块,您将在/ admin / people / permissions中看到计算机权限
function YOURMODULE_form_user_admin_permissions_alter(&$form, &$form_state)
{
$perms = &$form['permission'];
$group_counter = 0;
foreach ($perms as $k => &$v) {
if ($k == $group_counter) { // skip fieldsets
$group_counter++;
continue;
}
$v['#markup'] .= ' (<span class="description" style="color:brown">'.$k.'</span>)';
}
}
问候
array_keys()
显然只能得到所需的信息。然后,您还可以使用中的结果user_role_grant_permissions
,例如,授予管理员角色所有权限:user_role_grant_permissions(variable_get("user_admin_role"), array_keys(user_permission_get_modules()));