0

ユーザーがログインできないようにする権限が必要です (したがって、ロール X のすべてのユーザーを一時的にブロックし、プロファイル ページを利用できるようにすることができます)。

Pro Drupal Development 2nd Edition からのログイン プロセスの抜粋:

  1. ログインフォームからの投稿
  2. ユーザーがブロックされていますか?
  3. ユーザーはアクセス制御によって拒否されていますか?

プロセスのステップ 3 でユーザーを停止したいと考えています。モジュールがあります:

/**
 * Implementation of hook_perm().
 */
function odp_perm() {
  return array('log in');
}

/**
 * Implementation of hook_user
 * lock out without the 'log in' permission
 */
function odp_user($op, &$edit, &$account, $category = NULL) {
    if ($op == 'login' && ! user_access('log in')) {
      drupal_set_message("You do not have access to log in.", "error");
      drupal_goto('logout'); //doesn't work
      drupal_goto('content/party-tonight'); //also doesn't work
    }
}

おそらく私は drupal_goto を間違って使用しています。

4

2 に答える 2

1

これはあなたがやろうとしていることを達成すると信じています。

/**
 * Implementation of hook_user
 * lock out without the 'log in' permission
 */
function odp_user($op, &$edit, &$account, $category = NULL) {
    if ($op == 'login' && ! user_access('log in')) {
        drupal_set_message("You don't have permission to log in");

        //prevent login
        header("Location: http://www.example.com/?q=logout");
        // header("Location: http://www.example.com/logout"); if using clean URLs
    }
}

これにより、ユーザーがログアウトされ、メッセージが表示されます。私の記憶が正しければ、ユーザーがログインした後に $op login を指定した hook_user が起動するため、これによりすぐにユーザーはすぐにログアウトされ、基本的にログインできないようになります。

于 2009-09-03T16:53:10.213 に答える
0

ATM でこれをテストするための Drupal インスタンスはありませんが、これが必要だと思います。

/**
 * Implementation of hook_user
 * lock out without the 'log in' permission
 */
function odp_user($op, &$edit, &$account, $category = NULL) {
    if ($op == 'login' && ! user_access('log in')) {
        global $user;
        $user = drupal_anonymous_user();
        drupal_set_message("You don't have permission to log in");

    }
}

これにより、ユーザー情報が削除され、代わりに匿名ユーザーに置き換えられます。

于 2009-09-03T17:08:46.453 に答える