Oturum açmış olan kullanıcının oturumu kapatmasına neden olmadan programlı olarak başka bir kullanıcının kimliğine bürünme


9

Bir modül $user, $userbir hatanın meydana gelmesi durumunda geçerli kullanıcının oturumu kapatmasına neden olmadan globalin değerini nasıl değiştirmeli, kendi kodunu yürütmeli ve orijinal değerini nasıl geri yüklemelidir ?


Bu konuda açık olan ve birden çok kez çağrıldığında bile bunu düzgün bir şekilde işleyebilen bir işlev ekleyen eski bir sorun var. Bkz. Drupal.org/node/287292 . Lütfen yamayı orada gözden geçirin ve test edin.
Berdir

1
Drupal.org'da Drupal 6, Drupal 7 ve Drupal 8 için başka bir kullanıcının kimliğine bürünme çözümü olan bir Topluluk Belgeleri oluşturma işlemi vardır: Başka Bir Kullanıcıyı Güvenle Taklit Etme .
iStryker

Yanıtlar:


18

Drupal_cron_run () işlevi cron her açılışında anonim için geçerli kullanıcı değiştirir beri sonra, tam olarak bunun için mükemmel bir örnek verir Bittikten sonra geri döner.

// 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);

Mevcut kullanıcı nesnesini bir yere ( $GLOBALSgüvenli tutmak için başka bir değişken içinde veya içinde) koyabilir ve yükleyerek herhangi bir kullanıcıya geçebilirsiniz user_load(). Bu, belirli bir işlemi gerçekleştirmek için belirli izinlerle ayarlanmış belirli bir kullanıcı olarak maskeli balo gibi bazı korkunç şeyler yapmanıza izin verir. İlke aynı.
Greg

Bu kod parçasında sadece potansiyel 1 problem. Eski oturumu $ old_session değişkenine kaydetmelisiniz. Kaydetme oturumunu false olarak ayarlayın, ardından sonunda drupal_save_session ($ old_session).
iStryker

diğer kullanıcı gibi drupal.org/project/phantomjs_capture kullanarak ekrana erişme ve bunları yakalama . Bu mümkün mü / zor mu? (DO sorunu drupal.org/node/2899252 ).
kiranking
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.