2

我正在一个已经设置了用户访问权限的网站上工作,这样只有登录的成员才能看到某些页面。现在我需要进入并使登录用户的访问更加具体。因此,任何登录的人都可以看到该站点,但有 2 个页面(称为 PDQ 和 Comm Plus)只能由具有 PDQ 或 Comm Plus 访问权限的用户访问。我使用 filemaker 10 数据库来跟踪用户信息。如果用户具有 PDQ 访问权限,则数据库中的 PDQ=1。该网站使用 Drupal、php 和 html 编码。

所以现在我很清楚该怎么做,但是缺少一些东西,而且我对 drupal 或 filemaker 不太熟悉。我需要页面来获取用户信息并查看数据库中 PDQ 的值。如果为 1,则授予对该页面的访问权限,如果为 0,则转到拒绝访问页面。

这是我到目前为止所拥有的

<?php require_once('DatabaseName');

global $user;
//looks at the current user
$use = $user->uid;

//Not sure what goes here. I need code that looks at the filemaker database to see
//what the value of PDQ is and then stores it in a variable.

if (!session_id()) session_start();
if (!isset($variableGoesHere) || $variableGoesHere == '0'){
  drupal_goto("access-denied");
  exit();
  }
?>

任何帮助将不胜感激。另外,如果我走在正确的轨道上,或者我需要寻找其他地方,请告诉我。谢谢!

4

2 回答 2

2

首先,使用 Drupal 而不是使用 Drupal 系统来存储信息是一个坏主意。如果您使用 Drupal,您可以使用外部源进行登录,但您的用户应该有一个 drupal 用户。

当您的用户是 Drupal 用户时,事情会变得容易得多。您可以使用 Drupal 访问控制系统来检查访问等。

如果 Drupal 正在为页面提供服务,您永远不应该编写像您显示的那样的代码,hook_menu这是您注册路径的方式有一个access callback选项,您可以在其中处理您的访问,或者您可以检查用户是否具有权限。仅当您在自定义模块中执行此操作时,此内容才适用,这就是您正在执行的操作。

无论如何,drupal_access_denied如果您想自己返回拒绝访问,您应该使用该功能。

于 2010-07-16T19:49:56.313 回答
1

我很久以前就知道了这一点,但我一直没有时间回答这个问题。所以这就是我所做的

    $WebAuth_find = $FILMAKER->newFindCommand('WebAccess');
$Search_findCriterions = array('Access::cntdPhoneNumberDisplayCalc'=>"==".$find,'Access::phoneType'=>"E-mail",'Access::phoneMain'=>"==1",'LoginAccess'=>'1');
foreach($Search_findCriterions as $key=>$value) {
    $WebAuth_find->AddFindCriterion($key,$value);
}
$WebAuth_Result = $WebAuth_find->execute();
if (FileMaker::isError($WebAuth_Result) && $WebAuth_Result->code == 401) {
                echo "FM ERROR CODE: ".$WebAuth_Result->code."<br>"."ERROR: ".$WebAuth_Result->getMessage();

这会在 WebAccess 布局下标识 Filemaker 数据库中的当前用户。如果出现问题,它会抛出错误消息。现在我正在查看当前用户,我让它查看数据库中 Comm Plus 和 PDQ 字段中的内容,并创建一个会话来保存信息。

else{
 $FinalResult = current($WebAuth_Result->getRecords());

 $_SESSION['district']= $district;
 $PDQ = $FinalResult->getField('PDQ_subscription');
 $_SESSION['PDQ'] = $PDQ;
 $CommPlus = $FinalResult->getField('CommPlus_subscription');
 $_SESSION['CommPlus'] = $CommPlus;

然后我只需将以下代码添加到我想要限制访问的任何页面的顶部。它查看会话以查看当前用户是否具有凭据,如果没有,他们将被定向到拒绝访问页面。

$PDQ_check = $_SESSION['PDQ'];
    if (!isset($PDQ_check) || $PDQ_check == '' || $PDQ_check == '0'){


       drupal_goto("access-denied");


    exit();


       }
于 2010-10-01T15:18:18.363 回答