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).
Jawaban:
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.
sumber
$GLOBALS
atau hanya dalam variabel lain untuk menjaga keamanan) dan beralih ke pengguna mana pun dengan memuatnyauser_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.