Przed Wami kolejny wpis z cyklu „drobna rzecz, a przydatna”, i jak to często w takich przypadkach bywa – pomysł na wpis wziął się z potrzeby, i będzie niejako kontynuacją wpisu dotyczącego dostępu do ustawień WooCommerce dla wybranych grup użytkowników, z tym, że tym razem będziemy nakładać blokadę na dostępne podczas dodawania nowego użytkownika role (użytkowników).
WordPress i ograniczone tworzenie nowych użytkowników
W jednym ze sklepów którymi zarządzam pojawiła się potrzeba by zwiększyć trochę uprawnienia obsłudze, o możliwość dodawania/tworzenia nowych użytkowników – to akurat można zrobić za pomocą licznych wtyczek, czy za pomocą własnego kawałka kodu (może kiedyś jakiś wpis o tym będzie). Większość tego typu programów opiera się na dostępnych w WordPressie (i dodatkach, jak np. WooCommerce) uprawnieniach, które możemy przypisywać (bądź zabierać) zarówno pojedynczym użytkownikom, jak i konkretnym grupom (role).
Problem pojawia się w sytuacji, gdy potrzebujemy wyjść poza te ramy – tu wprawdzie zazwyczaj w tego typu wtyczkach nic sobie nie wyklikamy (choć nie wykluczam, że są i tego typu wtyczki z interfejsem graficznym), ale na szczęście wystarczy kilka linijek kodu, które mam nadzieję wszyscy wiedzą jak możemy dodać do swojej strony.
add_filter( 'editable_roles', 'webinsider_wp_limit_user_create_user_role' );
function webinsider_wp_limit_user_create_user_role( $roles ){
$user = wp_get_current_user();
if( in_array( 'shop_manager', $user->roles )){
unset( $roles[ 'administrator' ]);
unset( $roles[ 'shop_manager' ]);
unset( $roles[ 'author' ]);
unset( $roles[ 'editor' ]);
unset( $roles[ 'contributor' ]);
}
return $roles;
}
W powyższym przykładzie użytkownik należący do grupy „menedżer sklepu” (shop_manager) podczas tworzenia nowego użytkownika nie będzie mógł dla niego wybrać roli/uprawnień przypisanych do:
- Administrator (administrator)
- Menedżer sklepu (shop_manager)
- Autor (author)
- Edytor (editor)
- Współpracownik (contributor)
Dostępne są wszystkie pozostałe, np. „klient” (customer), co akurat w tym przypadku jest wystarczającą rolą dla tworzonych użytkowników.
Można też ten kod zmodyfikować – zamiast sprawdzać do jakiej grupy należy użytkownik, sprawdzić, do jakiej nie należy:
add_filter( 'editable_roles', 'webinsider_wp_limit_user_create_user_role' );
function webinsider_wp_limit_user_create_user_role( $roles ){
$user = wp_get_current_user();
if( !in_array( 'administrator', $user->roles )){
unset( $roles[ 'administrator' ]);
unset( $roles[ 'shop_manager' ]);
unset( $roles[ 'author' ]);
unset( $roles[ 'editor' ]);
unset( $roles[ 'contributor' ]);
}
return $roles;
}
W tym przypadku zasady (ograniczenia) są identyczne, z tym, że dotyczą każdego użytkownika, który nie należy do grupy „Administratorzy” (administrator).
- Zero Trust od Cloudflare, czyli prosty i bezpieczny sposób na dostęp do lokalnych zasobów z zewnątrz, bez publicznego adresu IP i otwierania portów na routerze - 1970-01-01
- Home Assistant i integracja z IMGW-PIB, czyli tworzymy automatyzację z powiadomieniami bazując na sensorach zagrożenie i alarm powodziowy - 1970-01-01
- Home Assistant 2024.9 i kolejne przydatne nowości w widoku „sekcje”, dzięki którym jeszcze lepiej można dopasować wygląd - 1970-01-01