这可能很简单,但我是Drupal的新手。我工作的组织不久前转而使用Drupal,但是在各种外部PHP文件中仍然存在一些遗留代码,这些代码在Drupal中转换为工作会很麻烦。
但是,能够根据针对Drupal进行身份验证的人限制对其中某些页面的访问权限,这将是非常好的。 (有些页面是管理性的,目前对于知道URL的人来说是可见的。是的,设计很差,但这就是我继承的......)
如何从外部PHP文件中检查Drupal,以查看访问给定页面的人是否已通过身份验证?
答案 0 :(得分:6)
我会考虑Rimians建议在Drupal本身注册URL(+1),但作为替代方案,您可以“手动”引导Drupal并直接从其他脚本检查用户权限:
// 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
注意: Drupal在引导期间做了相当多的工作,包括一些操作和全局变量的设置,因此请务必仔细检查遗留代码的干扰/冲突(也适用于里米安人的建议)。
如果您只想限制对经过身份验证的用户的访问,可以将user_access()
来电替换为user_is_logged_in()
。如果您想按角色检查,可以添加global $user;
并检查$user->roles
数组的内容
答案 1 :(得分:5)
您需要在菜单路由器中包含这些URL,以便Drupal可以引导并检查您的权限。然后你需要找到你的第三方PHP作为包含文件或可能通过一个接口运行。
需要一些聪明的定制工作,但可能不太难。 :)
答案 2 :(得分:1)
此文件应该在Drupal安装中 很容易
//set the working directory to your Drupal root
define("DRUPAL_ROOT", "/var/www/drupal/");
//require the bootstrap include
require_once 'includes/bootstrap.inc';
//Load Drupal
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
//(loads everything, but doesn't render anything)
$name = 'admin';
$password = 'admin';
//use Drupal user_authenticate function
if(!user_authenticate($name, $password)){
echo 'invalid';
}else{
echo 'valid';
}
答案 3 :(得分:0)
我即将做同样的事情。我完全为这些案件制作了组件UserlandSession;它是一个完全独立于本机PHP会话的纯PHP会话实现。
在Drupal中,您将在会话中维护用户的信息,然后可以使用任何其他PHP代码访问该会话。
使用脚本获取实例...
<?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']);
在其他应用中:
<?php
$sess = (require 'path/to/getSessionInstance.php');
$sess->start();
$userInfo = $sess->get('user');
答案 4 :(得分:-2)
Drupal将用户身份验证存储在会话中。但是它使用它自己的自定义会话处理(请参阅includes / bootstrap.inc,它附加自定义处理程序,并包含/ session.inc用于回调函数)。如果您使用相同的会话处理功能,则可以访问Drupal会话数据以查看用户是否已通过身份验证。