web-dev-qa-db-ja.com

すべてのページにアクセスできるのは管理者のみ

ページへのアクセスを制限したい。管理者のみがページを表示できるようにする必要があります。

私は従った このチュートリアル

function example_menu() {
  $items['example'] = array(
    'title' => 'My Page',
    'page callback' => 'example_custom_page',
    'access callback' => 'example_user_has_role',
    'access arguments' => array(1, array('adminstrator')), // Argument 1 loads the user, argument 2 is the role name.
    'type' => MENU_NORMAL_ITEM,
  );

  return $items;
}


function check_user_has_role($user, $roles = array()) {
    foreach ($roles as $role) {
        if (in_array($role, $user->roles)) {
            return TRUE;
        }
    }
    return FALSE;
}

しかし、ログアウトした後でも [〜#〜] url [〜#〜] にアクセスできました。私の間違いは何ですか?これを達成するためのより良い方法はありますか?

2
Hitesh

アクセスコールバックの名前が間違っていると思います。 (example_user_has_role => check_user_has_role)。また、ロール名(adminstrator => administrator)を間違えました。

とにかく、あなたはこれをより簡単な方法でこれを達成することができます(URLの引数を避けます)

function example_menu() {
  $items['example'] = array(
    'title' => 'My Page',
    'page callback' => 'example_custom_page',
    'access callback' => 'check_user_has_role',
    'type' => MENU_NORMAL_ITEM,
  );

  return $items;
}


function check_user_has_role() {
  global $user;
  if (in_array('administrator', $user->roles)) {
    return TRUE;
  }
  return FALSE;
}
3
pbonnefoi

あなたはこの例にそのまま従いませんでした。

この例では、次のように自動読み込みを使用しています。

$items['example/%user']

あなたの道はそうではない、それゆえあなたの問題。

$ userをパラメーターとしてアクセスコールバックと引数にドロップし、以下を使用して疑似ユーザーオブジェクトを取得します。

global $user
2
J. Reynolds