Drupal访问控制到自定义用户配置文件页面

时间:2015-06-09 17:20:07

标签: php drupal drupal-7

我正在尝试向Drupal 7用户个人资料添加新标签。 不幸的是,我找不到让用户查看页面的正确访问参数,但是限制他通过更改网址中的用户ID来查看其他用户的页面。

目前,管理员可以访问它,但不能访问注册用户。

这是当前的代码:

$items['user/%user/apples'] = array(
    'title' => t('My apples'),
    'type' => MENU_LOCAL_TASK,
    'description' => t('Configure your apples'),
    'access arguments' => array(
      'administer site configuration'
    ),
    'page callback' => 'drupal_get_form',
    'page arguments' => array(
      'mysite_apples_config_page'
    ),
    'file' => 'mysite.apples.inc'
);

我在哪里可以找到一个例子?

1 个答案:

答案 0 :(得分:1)

我认为可以实现的唯一方法是编写自定义access callback逻辑。

在此回调中,您将检查用户是否具有与他尝试查看的页面相同的uid。如果是,请授予他访问权;否则,阻止他。

function my_custom_access_callback($account) {

    global $user;

    // allow admin users
    if(user_access("administer site configuration")) {
        return TRUE;
    }

    // allow the user to view his own page
    if($user->uid == $account->uid) {
        return TRUE;
    }

    // disallow the rest
    return FALSE;
}

在你的hook_menu中使用新的访问回调:

$items['user/%user/apples'] = array(
    'title' => t('My apples'),
    'type' => MENU_LOCAL_TASK,
    'description' => t('Configure your apples'),
    'access callback' => 'my_custom_access_callback', // use the new callback.
    'access arguments' => array(1), // use %user as the callback argument.
    'page callback' => 'drupal_get_form',
    'page arguments' => array(
      'mysite_apples_config_page'
    ),
    'file' => 'mysite.apples.inc'
);