作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
到目前为止,在前面的例子中,我们简单的将菜单项的access callback键设置为了TRUE,这意味着所有的用户都可以访问我们的菜单项。一般情况下,通过在模块中使用hook_ permission ()来定义权限,并使用一个函数来检查这些权限,从而实现对菜单的访问控制。这里所用的函数定义在菜单项的access callback键中,一般使用user_access。让我们定义一个名为access abc的权限;如果用户所在角色不具有该权限,当他访问页面http://localhost/thinkindrupal/menu_abc时,就会看到一个“拒绝访问”提示。
/**
* 实现 hook_permission().
*/
function menu_abc_permission() {
$perms = array(
'access abc' => array(
'title' => t('访问菜单ABC示例页面'),
),
);
return $perms;
}
/**
* 实现 hook_menu().
*/
function menu_abc_menu() {
$items['menu_abc'] = array(
'title' => '菜单ABC',
'description' => '一个简单的菜单项.',
'page callback' => 'menu_abc_callback_page',
'file' => 'menu_abc.pages.inc',
'access callback' => 'user_access',
'access arguments' => array('access abc'),
'weight' => 10,
'menu_name' => 'main-menu',
);
return $items;
}
在这里,我们首先实现了hook_ permission这个钩子函数,在这个钩子函数中,我们定义了“访问菜单ABC示例页面”的权限。注意这里权限的定义,也是采用的数组的形式。'access abc'是这个数组的键,'title'表示这个权限的名字。
图3-5 我们定义的权限,显示在了权限列表页
在前面的代码中,根据函数user_access('access abc')的返回结果,来判定是否允许用户访问的。现在,菜单系统就相当于一个门卫,hook_permission就相当于各种出入证,当用户访问特定路径时,需要提供相应的出入证明,没有有效的身份证明,就会被负责任的门卫遣返回家。
图3-6 匿名用户访问该页面,得到的提示
user_access()函数是默认的访问回调。如果你没有定义访问回调的话,那么访问参数将被菜单系统传递给user_access()。