Je souhaite éviter l'accès à tilisateur /% utilisateur/vue, alors seul des administrateurs peuvent voir des profils. Au début, j'ai essayé de changer l'autorisation user_view_access sans aucune chance.
J'ai essayé d'utiliser le crochet Hook_menu_alter:
53 function mymenu_menu_alter(&$items) {
54 $items['user'] = array(
55 'access callback' => 'user_access',
56 'access arguments' => array('access administration pages'),
57 'type' => MENU_NORMAL_ITEM,
58 );
59 $items['user/%user_uid_optional'] = array(
60 'access callback' => 'user_access',
61 'access arguments' => array('access administration pages'),
62 'type' => MENU_NORMAL_ITEM,
63 );
64 $items['user/%user/view'] = array(
65 'access callback' => 'user_edit_access',
66 'access arguments' => array('access administration pages'),
67 'type' => MENU_NORMAL_ITEM,
68 );
Cela ne marche pas non plus. Avez-vous un indice?
Il y a quatre problèmes avec le code que vous avez signalé:
array('access administration pages')
, comme vous le faites.array(1)
, user_edit_access()
permet aux utilisateurs de voir leur propre profil d'utilisateur; Si vous souhaitez éviter de montrer aux utilisateurs leur propre profil utilisateur, cette fonction n'est pas la fonction que j'utiliserais comme rappel d'accès.function mymenu_menu_alter(&$items) {
$items['user/%user/view']['access callback'] = FALSE;
}
function mymenu_user_view_access($account) {
return $account && $account->uid && user_access('administer users');
}
Enfin j'ai atteint ce que je voulais avec:
function mymenu_menu_alter(&$items) {
$items['user/%user_uid_optional'] = array(
'page callback' => '_mymenu_profile_view',
'page arguments' => array(1),
'type' => MENU_LOCAL_TASK,
);
}
function _mymenu_profile_view($account) {
global $user;
if (user_access('administer users')) {
include_once(drupal_get_path('module', 'user').'/user.pages.inc');
return user_view($account);
} else {
return drupal_not_found();
}
}
Merci pour vos suggestions!