# User Switching

> A User Switching egy ingyenes WordPress-bővítmény, amellyel egy kattintással átválthatsz egy másik felhasználó fiókjára, így kijelentkezés és jelszó nélkül teszteled a szerepköröket és a jogosultságokat.

A [User Switching](https://wordpress.org/plugins/user-switching/) ingyenes, nyílt forráskódú bővítmény. Egy kattintással bejelentkeztet egy másik felhasználó nevében, és ugyanígy vissza is visszavált a saját fiókodra. Fejlesztéskor erre két tipikus helyzetben van szükség: megnézed, mit lát egy WooCommerce-vásárló, és kipróbálod, mit szerkeszthet egy szerkesztő. Jelszót nem kell kérned vagy megváltoztatnod, és a saját munkamenetedből sem kell kilépned.

## Telepítés

1. Menj a **Bővítmények → Új hozzáadása** oldalra.
2. Keress rá: **User Switching**.
3. Kattints a **Telepítés most**, majd az **Aktiválás** gombra.

WP-CLI-vel:

```bash title="Terminál"
wp plugin install user-switching --activate
```

[Bedrock](https://hub.hellowp.io/hu/knowledge-base/developer-tools/bedrock/) projektben Composerrel add hozzá, és utána aktiváld:

```bash title="Terminál"
composer require wp-plugin/user-switching --dev
wp plugin activate user-switching
```

A `--dev` miatt az éles `composer install --no-dev` nem telepíti. A WordPress.org oldala szerint WordPress 6.3 és PHP 7.4 vagy újabb kell hozzá.

## Átváltás egy felhasználóra

A **Switch To** link itt jelenik meg:

- a **Felhasználók** képernyőn, a felhasználók műveleti linkjei között;
- egy felhasználó profiloldalán.

A WordPress Command Palette-ben is megtalálod: rákeresel egy felhasználóra, és onnan átváltasz rá.

1. Nyisd meg a **Felhasználók** oldalt.
2. Vidd az egeret a kívánt felhasználó sora fölé, és kattints a **Switch To** linkre.
3. A bővítmény átjelentkeztet, és te már az ő fiókjában böngészel.

Multisite-on a Network Admin **Felhasználók** képernyőjéről is válthatsz.

## Visszaváltás és kikapcsolás

A **Switch back** link minden irányítópult-képernyőn és a WordPress eszköztár profilmenüjében ott van, amíg másik fiókban vagy.

A **Switch off** a profilmenüben található. Kijelentkeztet, de megőrzi a felhasználóazonosítódat egy sütiben, így újbóli bejelentkezés nélkül visszaválthatsz. Olyan, mintha „senkivé” válnál: ebben az állapotban a kijelentkezett látogatók nézetét teszteled. Kikapcsolás után a **Switch back** link megjelenik az oldal láblécében, a bejelentkezési képernyőn és a „Meta” widgetben is.

## Mire használd

**WooCommerce vásárlói nézet.** Válts át egy teszt-vásárlóra, és végigmehetsz a vásárló útján: kosár, pénztár, fiók, rendelések. A WooCommerce több admin képernyőjéről is válthatsz, ha Shop Managerként vagy adminisztrátorként vagy bejelentkezve.

**Szerkesztői jogosultság tesztelése.** Válts át egy szerkesztő, szerző vagy közreműködő szerepkörű felhasználóra, és nézd meg, melyik menüpontot látja, mit tud szerkeszteni. Ha egy egyedi jogosultságot állítottál be, itt derül ki, hogy tényleg úgy működik-e, ahogy akartad. Ugyanezt jól kiegészíti a [Query Monitor](https://hub.hellowp.io/hu/knowledge-base/developer-tools/query-monitor/) jogosultság-panelje (`QM_ENABLE_CAPS_PANEL`), amely a jogosultság-ellenőrzéseket listázza.

A BuddyPress tagprofil- és taglista-képernyőin, a bbPress tagprofiljain szintén megjelenik az átváltás.

## Ki használhatja

Átválthat, akinek megvan az `edit_users` jogosultsága. Alapértelmezésben ez az adminisztrátor, Multisite-on csak a szuperadmin. Emellett szerkeszthetnie is kell a célfelhasználót, vagyis az egyedi jogosultság-leképezéseket a bővítmény tiszteletben tartja.

A `switch_users` meta jogosultságot külön is megadhatod vagy megvonhatod egy felhasználótól vagy szerepkörtől. A szűrőnek 9-es prioritáson kell futnia:

```php title="functions.php"
add_filter( 'user_has_cap', function ( $allcaps, $caps, $args, $user ) {
	if ( 'switch_to_user' === $args[0] ) {
		if ( my_condition( $user ) ) {
			$allcaps['switch_users'] = true;
		}
	}
	return $allcaps;
}, 9, 4 );
```

A `my_condition()` a te saját feltételed. A célfelhasználó azonosítója a `$args[2]`-ben van. A kapott felhasználónak a Felhasználók menü eléréséhez a `list_users` jogosultság is kell. A `$allcaps['switch_users']` értékét `false`-ra állítva megvonhatod a jogot attól is, akinek az `edit_users` megvan.

## Biztonság

- Csak olyan felhasználó válthat, aki szerkeszthet más felhasználókat.
- A bővítmény sosem mutatja meg a jelszavakat.
- A visszaváltáshoz a WordPress süti-hitelesítését használja, a váltásokat nonce védi.
- Ha egy fiókba már más is átváltott, megerősítést kér.

Adatvédelmi szempontból tudnod kell, hogy a bővítmény három sütit használ: `wordpress_user_sw_{COOKIEHASH}`, `wordpress_user_sw_secure_{COOKIEHASH}` és `wordpress_user_sw_olduser_{COOKIEHASH}`. Az értékük a felhasználó `user_login` mezőjét olvasható szövegként tartalmazza, ezért a GDPR szempontjából személyes adatként kezeld.

Éles oldalon csak a szükséges ideig és csak megbízható adminisztrátorokkal használd. Átváltás után valódi vásárló nevében látsz és cselekszel, ezért ne adj le rendelést és ne módosíts adatot helyette. Erre teszt-fiókot használj.

## Fejlesztőknek

A WordPress.org leírása szerint ezeket használhatod a saját kódodban:

- `user_switching::maybe_switch_url( $user )`: nonce-védett átváltó URL-t ad. Átváltás utáni célhoz fűzz hozzá `redirect_to` paramétert.
- `current_user_switched()`: ha a jelenlegi felhasználó átváltással került ide, az eredeti `WP_User` objektumot adja, különben `false`-t.
- Akciók: `switch_to_user`, `switch_back_user`, `switch_off_user`.
- Szűrő: `user_switching_redirect_to`, az átváltás utáni átirányítás helyét módosítja.

```php title="Egyedi Switch To link"
if ( method_exists( 'user_switching', 'maybe_switch_url' ) ) {
	$url = user_switching::maybe_switch_url( $target_user );
	if ( $url ) {
		printf(
			'<a href="%1$s">Switch to %2$s</a>',
			esc_url( $url ),
			esc_html( $target_user->display_name )
		);
	}
}
```

## Hasznos linkek

- [User Switching a WordPress.org-on](https://wordpress.org/plugins/user-switching/)
- [User Switching a GitHubon](https://github.com/johnbillion/user-switching)
