Dış PHP Drupal kimlik denetleme

4 Cevap php

Bu da basit olabilir, ama Drupal yeniyim. Bir süre önce Drupal geçiş için işe, ancak bazı eski kod Drupal içinde işe dönüştürmek üzerinde hantal olacağını çeşitli dış PHP dosyaları hala var organizasyon.

Ancak, Drupal karşı doğrulaması bir kişiye dayanarak bu sayfaların bazı erişimi kısıtlamak edebilmek için çok güzel olurdu. (Bazı sayfalar ... idari ve URL'yi bilen herkes şu anda görünür, örneğin. Evet, kötü bir tasarım, ama bu miras buydu)

Nasıl belirli bir sayfasını ziyaret kişinin doğrulanmış olup olmadığını görmek için, harici bir PHP dosyasından, Drupal ile kontrol edebilirsiniz?

4 Cevap

Ben Drupal kendisi (1) içinde URL'leri tescil Rimians önerisi ile gitmek istiyorum, ama bir alternatif olarak, 'elle' Drupal önyükleyemez ve doğrudan yanı sıra diğer komut sonra bir kullanıcı izni kontrol:

// initialize Drupal
// TODO: adjust path according to placement of script (might need to change to Drupal directory first)
require './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
// check user access rights
// TODO: Adjust to the permission you want to restrict to, e.g. 'access content' or whatever
if (!user_access('administer nodes')) {
  // Insufficient rights, say so
  drupal_access_denied();
  exit(0);
}
// ... call legacy script

NOTE: Drupal global değişkenler bazı manipülasyon ve ayarı dahil bootstrap sırasında iş biraz, o yüzden (aynı zamanda Rimians Öneriniz için geçerli olacak) eski koduyla müdahaleler / çatışmalar için dikkatlice kontrol ettiğinizden emin olun.

Yalnızca kimliği doğrulanmış kullanıcıların erişimini kısıtlamak istiyorsanız, user_access() call with user_is_logged_in() . If you want to check by role, you can add a global $user; olarak değiştirin ve $user->roles dizinin içeriğini kontrol edebilirsiniz

Drupal önyükleyemez ve izinlerini kontrol edebilirsiniz böylece menü yönlendirici o URL'leri gerekiyordu. Sonra bir arayüz üzerinden belki bir içerme dosyası ya da üçüncü parti PHP çalıştırmak için uzak bulmak gerekiyordu.

Bazı zeki özel çalışma gerekli ama muhtemelen çok zor değildir. :)

Ben aynı şeyi yapmak üzereyim. I UserlandSession tam olarak bu gibi durumlar için bileşeni yaptı; Bu doğal PHP Sessions tamamen bağımsız bir saf PHP oturum uygulaması bulunuyor.

Drupal içinde size oturumda Kullanıcı bilgileri korumak istiyorsunuz, o zaman herhangi bir diğer PHP kodu oturumuna erişebilirsiniz.

Bir örneğini almak için bir komut dosyası kullan ...

<?php // getSessionInstance.php

use Shibalike\Util\UserlandSession\Storage\Files;
use Shibalike\Util\UserlandSession;

return new UserlandSession(
    new Files('MySession', array('path' => '/path/to/session/storage'))
);

Drupal:

<?php
$sess = (require 'path/to/getSessionInstance.php');
$sess->start();
$sess->set('user', $GLOBALS['user']);

Diğer uygulamalar:

<?php
$sess = (require 'path/to/getSessionInstance.php');
$sess->start();
$userInfo = $sess->get('user');

Drupal oturumunda kullanıcı kimlik doğrulaması saklar. Ancak (bkz o özel işleyicileri ekler ve geri çağırma işlevleri için / session.inc includes / bootstrap.inc dahil) işleme bunu kendi özel oturum kullanır. Eğer aynı oturum taşıma işlevini kullanın Eğer kullanıcı doğrulanmış olup olmadığını görmek için Drupal oturum verilerini erişebilir.