Secara program menyamar sebagai pengguna lain tanpa menyebabkan pengguna yang saat ini masuk untuk keluar


9

Bagaimana seharusnya modul mengubah nilai global $user, mengeksekusi kode sendiri, dan mengembalikan nilai asli $usertanpa menyebabkan pengguna saat ini akan keluar jika terjadi kesalahan?


Ada masalah lama yang terbuka tentang ini, yang menambahkan fungsi yang dapat menangani ini dengan benar, bahkan ketika dipanggil beberapa kali. Lihat drupal.org/node/287292 . Harap tinjau dan uji tambalan di sana.
Berdir

1
Telah ada pembuatan Dokumentasi Komunitas yang memiliki solusi untuk menyamar sebagai pengguna lain untuk Drupal 6, Drupal 7 dan Drupal 8 di drupal.org: Aman Meniru Pengguna Lain .
iStryker

Jawaban:


18

Fungsi drupal_cron_run () memberikan contoh sempurna untuk hal ini, karena ia mengubah pengguna saat ini menjadi anonim setiap kali cron dijalankan, kemudian beralih kembali setelah selesai.

// Prevent session information from being saved while doing funky stuff.
$original_session_state = drupal_save_session();
drupal_save_session(FALSE);

// Force the current user to anonymous to ensure consistent permissions on
// funky stuff runs.
$original_user = $GLOBALS['user'];
$GLOBALS['user'] = drupal_anonymous_user(); // Or use user_load() for a non-anonymous user.

// Do funky stuff here...

// Restore the user.
$GLOBALS['user'] = $original_user;
drupal_save_session($original_session_state);

Patut dicatat bahwa Anda dapat menyimpan objek pengguna saat ini di suatu tempat (di $GLOBALSatau hanya dalam variabel lain untuk menjaga keamanan) dan beralih ke pengguna mana pun dengan memuatnya user_load(). Yang memungkinkan Anda untuk melakukan beberapa hal mengerikan seperti menyamar sebagai pengguna tertentu yang diatur dengan izin khusus untuk melakukan proses tertentu. Prinsipnya sama.
Greg

Hanya ada 1 masalah dengan kode ini. Anda harus menyimpan sesi lama dalam variabel $ old_session. Setel sesi save ke false, lalu di akhir drupal_save_session ($ old_session).
iStryker

mengakses dan menangkap layar menggunakan drupal.org/project/phantomjs_capture sebagai pengguna lain. Apakah mungkin / rumit? (DO mengeluarkan drupal.org/node/2899252 ).
kiranking
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.