it-swarm.it

Limitare quali ruoli possono visualizzare un nodo in base al tipo di contenuto

Sto usando Drupal 7 e ho creato un nuovo tipo di contenuto chiamato "eBook" e ho creato un nuovo ruolo chiamato "MonthlySubscriber." La mia intenzione è di consentire solo agli utenti con "MonthlySubscriber" per visualizzare i nodi "eBook". Quando ho esaminato le impostazioni di autorizzazione per un ruolo, ho visto le caselle di controllo che consentono di creare, modificare ed eliminare nodi di quel tipo di contenuto, ma non ci sono caselle di controllo per visualizzare i nodi.

Come posso limitare gli utenti che possono visualizzare i nodi "eBook" solo agli utenti con il ruolo "MonthlySubscriber"?

17
John

È necessario installare il modulo Content Access per aggiungere questo controllo di accesso.

Questo modulo consente di gestire le autorizzazioni per i tipi di contenuto per ruolo e autore. Ti consente di specificare la visualizzazione personalizzata, modificare ed eliminare le autorizzazioni per ogni tipo di contenuto.

13
iStryker

Ecco un modo semplice per proteggere le pagine del nodo (nodo/NID) da utenti non privilegiati.

/**
 * Implements hook_menu_alter().
 */
function mymodule_menu_alter(&$items) {
  $items['node/%node']['access callback'] = 'mymodule_check_node_access';
}

/**
 * Determines whether the current user may perform the operation on the node.
 */
function mymodule_check_node_access($op, $node) {
  if ($node->type == 'protected_type' && !user_access('administer site configuration')) {
    return FALSE;
  }
  return node_access($op, $node);
}
5
ya.teck

Per drupal 7, prova a utilizzare hook_node_access () :

/**
 * Implements hook_node_access().
 */
function YOURMODULE_node_access($node, $op, $account) {
  if (
    $node->type == 'ebook' &&
    $op == 'view' &&
    !in_array('MonthlySubscriber', $account->roles)
  ) { return NODE_ACCESS_DENY; }
  return NODE_ACCESS_IGNORE;
}
5
Denis

L'accesso ai contenuti non ha funzionato per la mia Drupal 7, quindi ho usato invece Node View Permissions .

2
Sam King

Per drupal 7, prova questo: Access by Term

Fornisce un controllo di accesso al nodo molto flessibile e gerarchico (controllo dell'accesso al contenuto), per D7.

1
washooo

La soluzione hook_menu_alter pubblicata sopra da ya.teck funziona, ma è in conflitto con lo hook_node_access standard nel nome della sua funzione. il hook_menu_alter non è richiesto in questo caso, quindi la risposta postata da Denis sopra è secondo me più accurata e corretta. Alterando il menu_item come è fatto, il primo esempio di riferimento potrebbe essere bloccato da un altro modulo più in basso nella pipe.

0
ben.hamelin

Perferisco usando il modulo Node View Permissions . È più semplice del modulo Accesso contenuto.

Come in D6, aggiunge le autorizzazioni "Visualizza qualsiasi contenuto" e "Visualizza il proprio contenuto" a qualsiasi tipo di contenuto scelto.

enter image description here

I passaggi da seguire:

  1. Dopo aver installato e abilitato, vai a /admin/config/content/node-view-permissions e seleziona a quali tipi di contenuti vuoi limitare l'accesso.
  2. Quindi, vai a /admin/people/permissions#module-node_view_permissions e selezionare i ruoli che si desidera poter visualizzare il contenuto. Salva le autorizzazioni.

    Fatto!

0
Chris Happy

Ho usato uno snippet di codice trovato nella documentazione dell'API D7 per hook_node_access hook .

Questo codice consentirà l'accesso per visualizzare il contenuto "ebook" agli utenti che dispongono dell'autorizzazione "Visualizza ebook".

È necessaria una nuova autorizzazione per controllare l'accesso implementando hook_permission ().

/**
 * Implements hook_permission().
 */
function mymodule_permission() {
  return array(
    'view ebook' => array(
      'title' => t('View Ebook'),
      'description' => t('View Ebook nodes.'),
    ),
  );
}

Implementando hook_node_access () Drupal può concedere o negare l'accesso al nodo.

/**
 * Implements hook_node_access().
 */
function mymodule_node_access($node, $op, $account) {

  // Checks for an ebook node in view mode.
  if (is_object($node) && $node->type === 'ebook' && $op === 'view') {

    // Grants permission to view the node if the current user has an role
    // with the permission 'view ebook'.
    if (user_access('view ebook')) {
      return NODE_ACCESS_ALLOW;
    }

    // Otherwise disallows access to view the node.
    return NODE_ACCESS_DENY;
  }
  // For all other nodes and other view modes, don't affect the access.
  return NODE_ACCESS_IGNORE;
}

Altre autorizzazioni (modifica, eliminazione, ecc.) Possono essere gestite tramite le normali autorizzazioni Drupal.

Facoltativamente, puoi rimuovere il contenuto dalla panoramica dell'amministratore implementando hook_query_TAG_NAME_alter.

/**
 * Implements hook_query_TAG_NAME_alter().
 */
function mymodule_query_node_admin_filter_alter(QueryAlterableInterface $query) {
  if (!user_access('view ebook')) {
  $query->condition('n.type', 'ebook', '!=');
  }
}
0
batigolix