Drupal7站点维护模式下让匿名用户可以访问指定页面

在维护模式下,匿名用户只能访问到登录,重置密码的页面,其它页面是访问不到的。
因为在维护模式下,只有拥有权限 " Use the site in maintenance mode"( 使用网站维护模式)的用户角色才能正常访问其它页面。
那么我们如果还想让匿名用户访问几个我们指定的页面,该如何做呢?
我们发现登录页面在维护模式下是可以访问的,也就是说在登录页面下,访问模式由维护变成了正常,那么我们就查找下登录页面的实现方法。
在查找的过程中,我们发现在user.module中有这样一个hook调用:
/**
 * Implements hook_menu_site_status_alter().
 */
function user_menu_site_status_alter(&$menu_site_status, $path) {
  if ($menu_site_status == MENU_SITE_OFFLINE) {
    // If the site is offline, log out unprivileged users.
    if (user_is_logged_in() && !user_access('access site in maintenance mode')) {
      module_load_include('pages.inc', 'user', 'user');
      user_logout();
    }
    if (user_is_anonymous()) {
      switch ($path) {
        case 'user':
          // Forward anonymous user to login page.
          drupal_goto('user/login');
        case 'user/login':
        case 'user/password':
          // Disable offline mode.
          $menu_site_status = MENU_SITE_ONLINE;
          break;
        default:
          if (strpos($path, 'user/reset/') === 0) {
            // Disable offline mode.
            $menu_site_status = MENU_SITE_ONLINE;
          }
          break;
      }
    }
  }
  if (user_is_logged_in()) {
    if ($path == 'user/login') {
      // If user is logged in, redirect to 'user' instead of giving 403.
      drupal_goto('user');
    }
    if ($path == 'user/register') {
      // Authenticated user should be redirected to user edit page.
      drupal_goto('user/' . $GLOBALS['user']->uid . '/edit');
    }
  }
}

重点代码是:

case 'user/login':
case 'user/password':
  // Disable offline mode.
  $menu_site_status = MENU_SITE_ONLINE;

所以你也在你的模块代码里这样调用这个钩子 - hook_menu_site_status_alter 去实现即可。

你可能感兴趣的:(drupal,drupal7)