• oidc
  • wordpress

Integracja z WordPress dla autoryzacji

Druga część serii o integracji Logto z WordPress, skoncentrowana na autoryzacji.

Sijie
Sijie
Developer

W poprzednim artykule omówiliśmy, jak zintegrować Logto do uwierzytelniania w WordPress. Ten artykuł, jako druga część, zagłębi się w proces autoryzacji, koncentrując się na systemie ról w WordPress i na tym, jak zaimplementować mapowanie ról z Logto, biorąc pod uwagę, że wtyczka, której używaliśmy w poprzednim artykule, nie oferuje bezpośrednio możliwości autoryzacji.

Stworzymy funkcję mapowania ról, która automatycznie przydziela role WordPress użytkownikom na podstawie ról dostarczanych przez Logto RBAC (Role-Based Access Control).

Zrozumienie ról użytkowników WordPress

WordPress ma wbudowany system zarządzania rolami użytkowników, który określa jakie czynności (możliwości) użytkownik może wykonać na stronie. Domyślne role użytkowników obejmują Administratora, Redaktora, Autora, Współtwórcę i Abonenta, każdy z własnym zestawem możliwości

Te role są kluczowe dla utrzymania bezpieczeństwa i efektywności działania strony, ponieważ pomagają zapewnić, że użytkownicy mają odpowiednie poziomy dostępu na podstawie swoich obowiązków.

Rozwiązanie: niestandardowe mapowanie ról

Logto korzysta z Role-Based Access Control (RBAC) jako swój model autoryzacji, wykorzystując "zakresy" jako najmniejszą jednostkę pozwolenia. Te zakresy definiują konkretne czynności, które uwierzytelniony użytkownik ma prawo wykonać w obrębie aplikacji. Jednak WordPress działa na innej zasadzie zarządzania uprawnieniami użytkowników, polegającej na predefiniowanych "rolach", które łączą różne możliwości.

Biorąc pod uwagę tę fundamentalną różnicę, sugerujemy tworzenie specjalnych ról w Logto, które odpowiadają rolom zdefiniowanym w WordPress. Te role mogą nie mieć żadnych zakresów, są wykorzystywane tylko jako punkt odniesienia do mapowania użytkowników na role WordPress.

Wymagania wstępne

Przed kontynuacją upewnij się, że masz:

  • Zakończ poprzedni artykuł na temat integracji Logto z WordPress do uwierzytelniania, obejmuje to:
    • Witrynę WordPress z dostępem administratora.
    • Konto Logto z przygotowaną aplikacją dla twojej witryny WordPress.
    • Wtyczkę OpenID Connect Generic zainstalowaną i skonfigurowaną na twojej stronie WordPress.
  • Ustaw role w Logto, które odpowiadają rolom w WordPress. Na przykład, jeśli masz rolę 'editor' w WordPress, utwórz rolę 'group:editors' w Logto.

Implementacja mapowania ról z niestandardowym kodem

Do implementacji mapowania ról dodamy niestandardowy kod do pliku functions.php motywu WordPress. Wymaga to użycia haczyka wp_login, który jest wyzwalany podczas logowania użytkownika. Oto krok po kroku, jak to zrobić:

Krok 1: dostęp do funkcji motywu functions.php

Otwórz plik functions.php swojego motywu. Można uzyskać dostęp do tego pliku poprzez panel administratora WordPress, przechodząc do Wygląd > Edytor motywów i wybierając functions.php z listy plików po prawej stronie. Lub w kodzie źródłowym, przejdź do katalogu motywu WordPress i znajdź plik functions.php. Ten plik pozwala na dodanie niestandardowych funkcji PHP, które rozszerzają funkcjonalność witryny WordPress.

Krok 2: napisz funkcję mapowania ról

Poniżej znajduje się prosty przykład funkcji, którą możesz dodać do functions.php. Ta funkcja będzie wyzwalana podczas logowania użytkownika, i przydzieli role na podstawie roli roles podanej przez Logto.

Krok 3: zrozumienie kodu i dostosowanie go

  • Funkcja logto_handler: Ta funkcja przyjmuje dwa parametry: $user_login (nazwa użytkownika) i $user (obiekt użytkownika). Pobiera role z Logto, które są przechowywane w meta danych użytkownika jako openid-connect-generic-last-user-claim, mapuje tę rolę na odpowiednią rolę WordPress i przypisuje ją użytkownikowi.

  • add_action: Ta linia łączy funkcję logto_handler z akcją wp_login, która jest wyzwalana po zalogowaniu użytkownika. 10 to priorytet (domyślny), a 2 wskazuje liczbę argumentów akceptowanych przez funkcję.

Powyższy przykład przypisuje rolę 'editor' użytkownikom uwierzytelnianym przez Logto z nazwą roli group:editors. Jednak w prawdziwym scenariuszu, prawdopodobnie będziesz musiał zaimplementować więcej rodzajów mapowania ról.

Możesz znaleźć listę ról WordPress i ich możliwości tutaj.

Krok 4: przetestuj swoje ustawienia

Teraz przetestujmy funkcję mapowania ról, logując się za pomocą użytkownika, który ma rolę group:editors w Logto. Po zalogowaniu sprawdź rolę użytkownika w WordPress, aby upewnić się, że mapowanie działa poprawnie.

Wnioski

Integrując Logto z WordPress zarówno do uwierzytelniania, jak i autoryzacji, możesz zwiększyć bezpieczeństwo i funkcjonalność swojej strony. Pamiętaj, że podany tutaj kod jest tylko podstawowym przykładem, być może będziesz musiał go dostosować do struktury ról i uprawnień swojej strony WordPress.