Drupal 7 ile Content Access modülünü kullanıyorum. Düğüm erişimini belirli bir rolden kısıtladığımda, menüdeki bağlantıyı da gizleyin.
ana menüde kısıtlı bağlantılar göstermenin bir yolu var mı?
Drupal 7 ile Content Access modülünü kullanıyorum. Düğüm erişimini belirli bir rolden kısıtladığımda, menüdeki bağlantıyı da gizleyin.
ana menüde kısıtlı bağlantılar göstermenin bir yolu var mı?
Yanıtlar:
Erişim içerik sisteminin temel amacı, her kullanıcının neler görebileceğini kontrol etmek ve olası her güvenlik sorunundan kaçınmaktır. Bu istenen davranıştır ve hemen hemen her modül veya genel ApI bunu kullanır, bu nedenle bunun için varsayılan çözümler bulamazsınız.
Aynı durumdaydım ve bulduğum tek çözüm, özel bir modül oluşturmak ve benim durumumda, istediğim tüm öğeleri almak için doğrudan menü tablosuna sorgulamak ve bir bağlantı görüntülemek için izinleri kendim kontrol etmekti. veya kullanıcının içeriği görme izni olmadığında içeriğin başlığı olabilir.
Bunu özel modül üzerinden yaptım:
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);
}
}
}
Bununla başa çıkmak için özel bir modül yazmanız gerekeceğinden eminim. İşte benim fikrim: İçerik Erişimi kısıtlamalarını gevşetin, yani kullanıcıların içeriğinizi görüntülemesine izin verin. Ardından özel modülünüzün hook_node_load () yöntemini kullanması ve kullanıcılarınızın görmemesi gereken düğümleri yüklerken 403 HTTP yanıtı vermesi gerekir. Ayrıca hook_permission () uygulanmalı, böylece izin sayfasında erişimi kolayca yapılandırabileceksiniz.
Düğümün tamamını gizleyerek ve içerik türüne ve iznine göre filtreleyen hızlı bir örnek:
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();
}
}
}
Veya 403 döndürmek yerine bazı düğüm alanlarını gizleyebilirsiniz. Ancak bu, hook_node_load () için API belgelerine göre önerilmez.
"Her zaman görünür" modülünü kullanabilirsiniz.
Sorunuzla ilgili daha ayrıntılı cevap burada https://drupal.stackexchange.com/a/52149/7313
admin/structure/menu/manage/main-menu/add
musunuz?