Modulo Views: come limitare l'accesso da parte dell'utente


8

Sto usando il modulo Viste per creare una vista alla quale solo utenti specifici dovrebbero poter accedere. So che Views include il controllo degli accessi in base al ruolo o alle autorizzazioni, ma ho bisogno di qualcosa di più preciso: in pratica, voglio poter dire che solo l'utente "x" e l'utente "y" possono accedere a una vista particolare (o qualcun altro con un ruolo di amministratore del sito). Quindi questo funzionerebbe in modo molto simile a come il modulo ACL agisce per i singoli nodi.

L'approccio migliore per creare un plug-in di accesso alle visualizzazioni personalizzate? Non ho molta esperienza con questo.

Inoltre, mi chiedo di utilizzare un argomento con qualche convalida per raggiungere questo obiettivo (in modo che non debba creare dozzine di visualizzazioni separate). Ad esempio, poiché questa vista sarà una scheda su un percorso nodo specifico, mi chiedo di impostare un campo di riferimento utente su quel nodo che specifica chi potrebbe vedere la vista. Avrei solo bisogno di un modo per convalidare la vista solo se l'utente corrente è uguale a un utente specificato nel campo di riferimento dell'utente.

Qualche idea? O sto rendendo questo più complicato di quanto debba essere?

Grazie Ben


Potrebbe essere necessario scrivere un plug-in di accesso alle visualizzazioni, ma se è possibile aggiornare la domanda con un po 'più di dettaglio, forse è possibile farlo in un altro modo. Cosa fa / visualizza la vista? A quali utenti è consentito visualizzarlo? Gli utenti hanno ruoli diversi? Gli utenti hanno un campo specifico o qualcosa ad essi associato che consente loro di accedervi?
Jamie Hollern,

Jamie, grazie per la risposta. In realtà, sto anche usando Drupal Commerce per creare un tipo unico di negozio online. Come scheda su ciascun nodo del prodotto (oltre alle schede Visualizza e Modifica), voglio creare una scheda aggiuntiva denominata "Ordini" che sarebbe una vista che mostra tutti gli ordini che hanno incluso quel particolare prodotto. Il fornitore del prodotto particolare è l'utente a cui voglio essere in grado di visualizzare la vista "Ordini" per quel prodotto.
BenK,

In questo modo, il fornitore può monitorare le vendite del proprio prodotto su base continuativa. Ma non voglio concedere l'accesso a tutti coloro che ricoprono un ruolo di "fornitore", perché qualsiasi fornitore sarebbe in grado di visualizzare le vendite dei prodotti di altri fornitori. Ha senso? ;-)
BenK,

Risposte:


5

Invece di limitare le autorizzazioni per la vista, è possibile limitare le autorizzazioni per la voce di menu che porta a quella vista (che si tratti di una scheda su un nodo o di una richiamata del menu). Puoi creare la tua vista solo con una visualizzazione "Predefiniti" e nessuna visualizzazione Pagina (quindi gli utenti non possono semplicemente capire il percorso). Quindi nel tuo page callbackper la voce di menu basta chiamare views_embed_viewper visualizzare la vista. Sembra che gestire le autorizzazioni su una voce di menu potrebbe essere più semplice che scrivere un nuovo plug-in per Views (anche se un plug-in potrebbe essere utile per gli altri).


Grazie per il suggerimento! Ho finito per seguire questo approccio generale (suggerito anche da Berdir), ma ho creato un campo di riferimento utente su ciascun nodo chiamato field_usercanaccess. Sono stato in grado di utilizzare hook_menu () e definire un callback di accesso che assicurasse che l'utente corrente corrispondesse a un utente a cui si fa riferimento nel campo. Altrimenti, la scheda (e la vista) non verrebbero visualizzate. Funziona benissimo! :-)
BenK,

@BenK fantastico! Sono contento che tu abbia funzionato. Per contribuire a rendere Drupal Answers un'ottima risorsa, dovresti anche votare le risposte (o domande) che hai trovato utili. Quindi dovresti probabilmente votare per la risposta di @ Berdir (e la mia, ma non sono io che cerco di ottenere voti, sta cercando di rendere Drupal Answers un sito migliore)
Chaulky

Grazie. :-) Sono nuovo di Stack Exchange e ho solo 13 punti. Quando provo a votare, mi dice che ho bisogno di 15 punti per votare. Quindi, se qualcuno ha due punti da risparmiare (o posso guadagnare in qualche altro modo) voterei sicuramente su risposte e domande.
BenK,

@BenK oh giusto, ho dimenticato il limite di 15 punti. Puoi sempre provare a rispondere a una domanda ... un voto sulla tua risposta ottiene 10 ripetizioni.
Chaulky

6

Prova il modulo Callback di Access View .

Fornisce il controllo di accesso basato sulla richiamata per Views.

Le funzioni di callback disponibili sono definite dai moduli utilizzando la hook_views_access_callbacks()funzione (nello stesso modo di in hook_perm()), quindi possono essere impostate nella configurazione "Restrizioni di accesso" della vista.


L'uso del callback per l'accesso alle viste funziona benissimo tranne uno strano errore fatale. Vedi qui: drupal.stackexchange.com/questions/3336/… . Sembra la strada da percorrere - ma come risolverlo?
Druvision,

2

Mi manca qualcosa, ma sembra che tu crei un nuovo ruolo e aggiunga questi utenti. Quindi utilizzare l'accesso alle visualizzazioni: funzione ruolo.

Se hai bisogno di associare i diritti di accesso a qualcosa nei contenuti, utilizzerei un accesso a Views personalizzato, che ho riscontrato un malfunzionamento durante la configurazione iniziale, ma apprezzerei la flessibilità una volta funzionante. Se la vista sta generando la voce di menu, non apparirà se la vista non passa la funzione di accesso.

Se stai nascondendo solo una voce di menu, mi sembra che la vista continuerebbe a funzionare e un Utente potrebbe modificare un URI per visualizzare i dati.

Jerry


1

Che ne dici di utilizzare il modulo Autorizzazioni personalizzate per creare alcune nuove autorizzazioni specificamente per il tuo scopo e quindi utilizzare il modulo Autorizzazioni utente per assegnare quelle nuove autorizzazioni ai singoli utenti?

Il modulo delle autorizzazioni personalizzate è molto leggero. Non sono così sicuro del modulo Autorizzazioni utente, poiché essenzialmente crea un nuovo ruolo per ogni utente dietro le quinte (questi ruoli non sono visibili nella pagina delle autorizzazioni principali). Se hai molti utenti, questo potrebbe aumentare leggermente le dimensioni dei tuoi ruoli e le tabelle user_roles.


Questo è un suggerimento interessante per usare le autorizzazioni personalizzate. Non avevo visto quel modulo da quando è diventato più ampio delle autorizzazioni di configurazione del sito. L'unica complicazione qui è che sto facendo tutto questo in Drupal 7 (e non esiste ancora una filiale ufficiale). Ma se riuscissi a farlo funzionare, potrebbe essere possibile specificare direttamente l'autorizzazione nel controllo di accesso della vista (senza bisogno del modulo Autorizzazioni utente). Grazie per il suggerimento! :-)
BenK,

Lo proverò e riporterò indietro.
BenK,

0

Bene, ha più senso. Penso che potresti (possibilmente, non sicuro al 100%) usare una vista e un argomento. Impostare l'argomento come id utente preso dall'utente attualmente connesso e fare in modo che l'argomento predefinito non visualizzi nulla. Dovrebbe essere in grado di farlo, anche se non so quanto sia sicuro che sia giusto. Se lo provi, rispondi e fammi sapere i tuoi progressi.


Sì, proverò le cose e riporterò indietro. Sto anche provando un plugin di accesso alle visualizzazioni con un argomento, quindi vedremo come va. Grazie.
BenK,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.