6访问控制

作者:老葛,北京亚艾元软件有限责任公司,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'表示这个权限的名字。

1.png 

              图3-5  我们定义的权限,显示在了权限列表页

在前面的代码中,根据函数user_access('access abc')的返回结果,来判定是否允许用户访问的。现在,菜单系统就相当于一个门卫,hook_permission就相当于各种出入证,当用户访问特定路径时,需要提供相应的出入证明,没有有效的身份证明,就会被负责任的门卫遣返回家。

   2.png

        图3-6  匿名用户访问该页面,得到的提示

    user_access()函数是默认的访问回调。如果你没有定义访问回调的话,那么访问参数将被菜单系统传递给user_access()

 


Drupal版本: