Estoy construyendo un sitio en Drupal, y se han añadido dos menús personalizados para dar dos grupos diferentes de gestión de enlaces (algunos la gente va a ver a un menú o a la otra, algunos podrán ver, y anónimo/de bajo nivel, los usuarios podrán ver ni).

El problema es, por el momento, todos los usuarios pueden ver los menús (pero los elementos de menú no son visibles).

Estoy tratando de crear un simple permisos de módulo y han creado la administración de las formas que especificar que los menús son visibles por el cual papel.

Pero no puedo encontrar un gancho que me permite anular la visibilidad de un menú particular – sólo los elementos.

Así, ¿cómo puedo limitar el acceso a menú papel en Drupal ahora que tengo una lista de permisos en la base de datos?

He mirado en Menú por Papel y el Acceso al Menú. Por desgracia, estos funcionan en el nivel de elemento y no en los menús directamente.

OriginalEl autor HorusKol | 2011-02-21

6 Comentarios

  1. 6

    Cada menú está en un bloque, y los bloques se pueden configurar para ser visible para un determinado grupo de usuarios (nivel de acceso).
    En drupal el sitio de administración: la Estructura de los Bloques de

    Perfecto. Esto me ayudó un montón. Además yo lo que hice fue crear un menú similar para el resto de funciones («usuario anónimo», «usuario autenticado», y «administrador») por lo que cada rol tiene un menú.

    OriginalEl autor steve

  2. 1

    El tiempo que usted use un bloque como un menú, puede utilizar el acceso al papel para el bloque de configuración, proporcionada por el núcleo.

    OriginalEl autor Daniel Wehner

  3. 0

    Para el menú de listado de esta función de trabajo: menu_get_names();

    Pero no tiene permiso de cheques o ganchos.

    ¿Dónde desea restringir la lista de menú? si en la edición de nodos que pueden alterar el menú, a través de hook_form_alter.

    OriginalEl autor Nikit

  4. 0

    No es la solución más elegante, pero usted puede hacer su cheque de acceso en el tema.

    OriginalEl autor mirzu

  5. 0

    Yo he venido para arriba con una solución – en lugar de usar el auto-generado bloques de menú para mostrar, he creado un solo bloque y coloque el código siguiente en mi módulo:

    function amh_menu_block($op = 'list', $delta = 0, $edit = array())
    {
        if ($op == 'list') {
            $blocks[0] = array(
                'info' => t('AMH Menu block'),
                'weight' => 0,
                'status' => 1,
                'region' => 'left',
            );
    
            return $blocks;
        } elseif ($op == 'view') {
            switch($delta) {
                case 0:
                    $block = array(
                        'subject' => '',
                        'content' => _amh_menu_display(),
                    );
    
                    break;
            }
    
            return $block;
        }
    }
    
    function _amh_menu_display()
    {
        global $user;
    
        $content = '';
    
        if ($user->uid != 0) {
            $result = db_query('SELECT * FROM {amh_menu_permission} p LEFT JOIN {menu_custom} m ON p.menu_name = m.menu_name LEFT JOIN {users_roles} u ON p.rid = u.rid WHERE u.uid = %d OR p.rid = 2', $user->uid);
        } else {
            $result = db_query('SELECT * FROM {amh_menu_permission} p LEFT JOIN {menu_custom} m ON p.menu_name = m.menu_name WHERE p.rid = 1');
        }
        $menus = array();
        while ($m = db_fetch_object($result)) {
            $menu = menu_tree($m->menu_name);
    
            if ($menu) {
                $content .= "\r\n<h2>" . $m->title . "<h2>\r\n";
                $content .= theme_menu_tree($menu);
            }
        }
    
        return $content;
    }

    Esto parece funcionar bien.

    OriginalEl autor HorusKol

Dejar respuesta

Please enter your comment!
Please enter your name here