J'utilise le module d' accès au contenu avec Drupal 7. lorsque je restreins l'accès aux nœuds à un rôle spécifique, il masque également le lien dans le menu.
existe-t-il un moyen d'afficher les liens restreints dans le menu principal?
J'utilise le module d' accès au contenu avec Drupal 7. lorsque je restreins l'accès aux nœuds à un rôle spécifique, il masque également le lien dans le menu.
existe-t-il un moyen d'afficher les liens restreints dans le menu principal?
Réponses:
L'objectif principal du système de contenu d'accès est de contrôler ce que chaque utilisateur peut voir et d'éviter tout problème de sécurité possible. C'est le comportement souhaité et presque chaque module ou ApI général l'utilise, vous ne trouverez donc pas de solutions par défaut pour cela.
J'ai été dans la même situation et la seule solution que j'ai trouvée a été de créer un module personnalisé et, dans mon cas, d'interroger directement la table de menu pour obtenir tous les éléments que je veux, et de vérifier moi-même les autorisations pour afficher un lien , ou simplement un titre du contenu lorsque l'utilisateur n'est pas autorisé à le voir.
Je l'ai fait via un module personnalisé:
function mymodule_form_menu_edit_item_alter(&$form, &$form_state, $form_id) {
if ($form_state['build_info']['args'][0] == 'edit') {
$item = $form_state['build_info']['args'][1];
$form['ignore_access_roles'] = array(
'#type' => 'checkboxes',
'#multiple' => TRUE,
'#title' => t("Ignore access"),
'#options' => user_roles(),
'#description' => t("If a user with one of the selected roles has no access to the menu item's path, the menu item is <strong>not</strong> hidden."),
'#default_value' => empty($item['options']['ignore_access_roles']) ? array() : $item['options']['ignore_access_roles'],
);
$form['#validate'][] = 'mymodule_form_menu_edit_item_validate';
}
}
function mymodule_form_menu_edit_item_validate(&$form, &$form_state) {
if (isset($form_state['values']['ignore_access_roles'])) {
$form_state['values']['options']['ignore_access_roles'] = $form_state['values']['ignore_access_roles'];
$form_state['values']['options']['alter'] = TRUE;
}
}
function mymodule_translated_menu_link_alter(&$link, $map) {
if (!empty($link['options']['ignore_access_roles']) && empty($link['access'])) {
global $user;
// Get role ids for which the ignore access option applies.
$rids = array_values($link['options']['ignore_access_roles']);
$matching_rids = array_intersect(array_keys($user->roles), $rids);
if (!empty($matching_rids)) {
// User has one of the specified roles: override menu link access.
$link['access'] = TRUE;
// Localize. This must be done because it is only done for links with
// access TRUE in _menu_link_translate.
_menu_item_localize($link, $map, TRUE);
}
}
}
Je suis sûr que vous devrez écrire un module personnalisé pour y faire face. Voici mon idée: assouplir les restrictions d'accès au contenu, c'est-à-dire permettre aux utilisateurs de visualiser votre contenu. Ensuite, votre module personnalisé doit implémenter hook_node_load () et générer une réponse HTTP 403 lors du chargement de nœuds que vos utilisateurs ne devraient pas voir. De plus, hook_permission () doit être implémenté, vous pourrez donc configurer facilement l'accès sur la page d'autorisation.
Voici un exemple rapide masquant le nœud entier et filtrant par type de contenu et autorisation:
function mymodule_permission() {
return array('access reserved content');
}
function mymodule_node_load($nodes, $types) {
if (in_array('my_reserved_content_type', $types)) {
if (!user_access('access reserved content')) {
drupal_access_denied();
}
}
}
Ou vous pouvez masquer certains des champs de noeud, au lieu de renvoyer un 403. Mais cela est déconseillé selon la documentation de l'API pour hook_node_load ()
Vous pouvez utiliser le module "Toujours visible".
La réponse plus détaillée à votre question est ici https://drupal.stackexchange.com/a/52149/7313
admin/structure/menu/manage/main-menu/add
?