Drupal 有效访问参数

Drupal 有效访问参数,drupal,drupal-7,Drupal,Drupal 7,如何查找有效的访问参数?我看了一下菜单,但我相信这只是其中的一部分 $items['admin/page'] = array( 'access arguments' => array('access administration pages'), ); 跨所有模块调用: $permissions = module_invoke_all('permission'); 如果我没记错的话,array\u key($permissions)将为您提供一个有效权限计算机名称的列表。每个

如何查找有效的访问参数?我看了一下菜单,但我相信这只是其中的一部分

$items['admin/page'] = array(
   'access arguments' => array('access administration pages'),
  );
跨所有模块调用:

$permissions = module_invoke_all('permission');

如果我没记错的话,
array\u key($permissions)
将为您提供一个有效权限计算机名称的列表。每个权限的标签/描述/其他设置位于每个单独的数组项中。

实际上,您对访问回调为“user\u access”(默认值)的访问参数的值感兴趣;由于模块可以使用不同的访问回调,因此访问参数的值在理论上可以是无限的

调用
hook\u permission()
的所有实现的替代方法是使用类似于以下代码的代码:

$permissions = array();
db_query("SELECT permission FROM {role_permission}");

foreach ($result as $row) {
  $permissions[$row->permission] = TRUE;
}
array\u-keys($permissions)
将为您提供所有权限的列表


我接受了他的询问;不同之处在于函数对作为参数传递的角色关联的权限感兴趣。

1-在:/admin/people/permissions上检查有效权限列表

2-在菜单挂钩中指定权限:

function webforms_advanced_router_menu() {

  $items['admin/config/mymodule'] = [
    'title' => 'MyModule',
    'page callback' => 'drupal_get_form',
    'access callback' => '_mymodule_admin_form',
    'access arguments' => array('administer site configuration'),
    'type' => MENU_CALLBACK
  ];

  return $items;
}

数据库里有什么地方可以查吗?好问题,我以前从来没有查过!它们似乎不是全部存储在数据库中,而是角色和权限之间的关联存储在
role\u permission
中。我猜权限管理页面每次运行时都会调用
module\u invoke\u all('permission')
,并在保存时重建
role\u permission
表。这样,所有的权限都不需要存储,Drupal可以推断出表中没有权限项的角色没有访问页面/资源的权限这实际上是有道理的,如果存储了所有权限,那么Drupal必须在数据库中保存的列表和模块提供的所有列表之间消除重复(自上次更新数据库以来,这些列表可能已更改)