Moduł Widoki: Jak ograniczyć dostęp użytkownika

8

Korzystam z modułu Widoki, aby utworzyć widok, do którego dostęp powinni mieć tylko konkretni użytkownicy. Wiem, że Widoki obejmują kontrolę dostępu według roli lub uprawnień, ale potrzebuję czegoś bardziej szczegółowego: Zasadniczo chcę móc powiedzieć, że tylko użytkownik „x”, a użytkownik „y” może uzyskać dostęp do określonego widoku (lub ktoś z rola administratora witryny). Tak więc działałoby to bardzo podobnie do działania modułu ACL dla poszczególnych węzłów.

Czy najlepszym rozwiązaniem jest utworzenie wtyczki niestandardowego dostępu do widoku? Nie mam z tym dużego doświadczenia.

Zastanawiam się także nad użyciem argumentu z pewną walidacją, aby to osiągnąć (aby nie musiałem tworzyć dziesiątek osobnych widoków). Na przykład, ponieważ ten widok będzie zakładką na określonej ścieżce węzła, zastanawiam się nad skonfigurowaniem pola referencyjnego użytkownika w tym węźle, które określa, kto może zobaczyć widok. Potrzebuję tylko sposobu, aby widok sprawdził, czy bieżący użytkownik jest równy użytkownikowi podanemu w polu referencyjnym użytkownika.

Jakieś pomysły? Czy też czynię to bardziej skomplikowanym, niż to konieczne?

Dzięki, Ben

BenK
źródło
Być może będziesz musiał napisać wtyczkę dostępu do widoku, ale jeśli możesz zaktualizować swoje pytanie nieco bardziej szczegółowo, być może uda Ci się to osiągnąć w inny sposób. Co robi / wyświetla widok? Którzy użytkownicy mogą to zobaczyć? Czy użytkownicy mają różne role? Czy użytkownicy mają określone pole lub coś, co pozwala im uzyskać do niego dostęp?
Jamie Hollern
Jamie, dziękuję za odpowiedź. Właściwie używam również Drupal Commerce do stworzenia unikalnego rodzaju sklepu internetowego. Jako zakładkę w każdym węźle produktu (oprócz kart Wyświetl i edytuj) chcę utworzyć dodatkową kartę o nazwie „Zamówienia”, która byłaby widokiem pokazującym wszystkie zamówienia, które zawierały ten konkretny produkt. Dostawcą konkretnego produktu jest użytkownik, którego chcę widzieć w widoku „Zamówienia” dla tego produktu.
BenK
W ten sposób dostawca może na bieżąco monitorować sprzedaż swoich produktów. Ale nie chcę udzielać dostępu wszystkim, którzy pełnią rolę „dostawcy”, ponieważ wtedy każdy dostawca będzie mógł zobaczyć sprzedaż produktów innych dostawców. Ma sens? ;-)
BenK

Odpowiedzi:

5

Zamiast ograniczać uprawnienia do widoku, możesz ograniczyć uprawnienia do elementu menu, który prowadzi do tego widoku (może to być karta w węźle lub wywołanie zwrotne menu). Możesz utworzyć widok tylko z ekranem „Domyślne” i bez wyświetlania strony (więc użytkownicy nie mogą po prostu ustalić ścieżki do niego). Następnie w page callbackpozycji menu po prostu zadzwoń, views_embed_viewaby wyświetlić widok. Wygląda na to, że obsługa uprawnień do elementu menu może być łatwiejsza niż pisanie nowej wtyczki do Widoku (chociaż wtyczka może być pomocna dla innych).

Chaulky
źródło
Dzieki za sugestie! Skończyło się na tym ogólnym podejściu (co również sugerował Berdir), ale utworzyłem pole referencyjne użytkownika w każdym węźle o nazwie field_usercanaccess. Byłem w stanie użyć hook_menu () i zdefiniować wywołanie zwrotne dostępu, które upewniło się, że bieżący użytkownik pasuje do użytkownika wymienionego w polu. W przeciwnym razie karta (i widok) nie byłyby wyświetlane. To działa świetnie! :-)
BenK
@BenK niesamowite! Cieszę się, że coś działa. W ramach pomocy, aby Drupal Answers był świetnym źródłem, powinieneś także głosować na odpowiedzi (lub pytania), które uważasz za przydatne. Powinieneś więc prawdopodobnie zagłosować na odpowiedź @ Berdira (i moją, ale to nie ja próbuję zdobyć głosy, to stara się uczynić Drupal Answers lepszą stroną)
Chaulky
Dzięki. :-) Jestem nowy w Stack Exchange i mam tylko 13 punktów. Kiedy próbuję głosować, mówi, że potrzebuję 15 punktów, aby głosować. Więc jeśli ktoś ma dwa punkty do stracenia (lub mogę je zdobyć w inny sposób), zdecydowanie głosowałbym na odpowiedzi i pytania.
BenK
@BenK no tak, zapomniałem o limicie 15 punktów. Zawsze możesz spróbować odpowiedzieć na pytania ... jedno głosowanie na twoją odpowiedź dostaje 10 powtórzeń.
Chaulky
6

Wypróbuj moduł Oddzwoń dostęp do widoku .

Zapewnia kontrolę dostępu opartą na wywołaniu zwrotnym dla widoków.

Dostępne funkcje wywołania zwrotnego są definiowane przez moduły za pomocą hook_views_access_callbacks()funkcji (w taki sam sposób jak w hook_perm()), a następnie można je ustawić w konfiguracji „Ograniczenia dostępu” w widoku.

użytkownik5318
źródło
Korzystanie z oddzwaniania dostępu do widoku działa świetnie, z wyjątkiem dziwnego błędu krytycznego. Zobacz tutaj: drupal.stackexchange.com/questions/3336/... . Wygląda na to, jak to zrobić - ale jak to naprawić?
Druvision
2

Pewnie czegoś mi brakuje, ale wygląda na to, że utworzyłbyś nową rolę i dodałbyś tych Użytkowników. Następnie użyj funkcji Widoki: Dostęp: rola.

Jeśli musisz powiązać prawa dostępu do czegoś w treści, skorzystałbym z niestandardowego dostępu do Widoku, co przy pierwszym uruchomieniu sprawiło mi ból, ale doceniam elastyczność, która działa. Jeśli widok generuje pozycję menu, nie pojawi się, jeśli widok nie przejdzie funkcji dostępu.

Jeśli ukrywasz tylko element menu, wydaje mi się, że widok nadal będzie działał, a użytkownik może dostosować identyfikator URI, aby wyświetlić dane.

Nocnik

Nocnik
źródło
1

Co powiesz na użycie modułu Niestandardowe uprawnienia do utworzenia nowych uprawnień specjalnie na swój cel, a następnie użycie modułu Uprawnienia użytkownika do przypisania tych nowych uprawnień poszczególnym użytkownikom?

Moduł uprawnień niestandardowych jest bardzo lekki. Nie jestem jednak pewien modułu uprawnień użytkownika, ponieważ zasadniczo tworzy on nową rolę dla każdego użytkownika za kulisami (role te nie są widoczne na głównej stronie uprawnień). Jeśli masz wielu użytkowników, może to nieco zwiększyć rozmiar twoich ról i tabel user_roles.

Tom Kirkpatrick
źródło
To interesująca propozycja użycia uprawnień niestandardowych. Nie widziałem tego modułu, ponieważ stał się szerszy niż tylko uprawnienia do konfiguracji witryny. Jedyną komplikacją jest to, że robię to wszystko w Drupal 7 (i nie ma jeszcze oficjalnej gałęzi). Ale jeśli uda mi się to uruchomić, może być możliwe określenie uprawnień bezpośrednio w kontroli dostępu do widoku (bez potrzeby korzystania z modułu uprawnień użytkownika). Dzieki za sugestie! :-)
BenK
Spróbuję tego i zdam raport.
BenK
0

Racja, to ma sens. Myślę, że możesz (być może nie w 100% pewien) użyć widoku i argumentu. Ustaw argument jako identyfikator użytkownika pobrany od aktualnie zalogowanego użytkownika i spraw, aby domyślny argument nie wyświetlał niczego. To powinno być w stanie to zrobić, chociaż nie wiem, jak bezpieczne byłoby być uczciwym. Jeśli spróbujesz, odeślij wiadomość i daj mi znać o swoich postępach.

Jamie Hollern
źródło
Tak, spróbuję i zdam raport. Próbuję również wtyczki dostępu do widoku z argumentem, więc zobaczymy, jak to będzie. Dzięki.
BenK
0

Jeśli chcesz łączyć różne wtyczki dostępu w Widoku, możesz rzucić okiem na moduł Dostęp do wielu widoków .

Steven Jones
źródło