如何限制特定页面上的用户访问? (Drupal,php,FileMaker Pro 10)

时间:2010-07-16 19:29:15

标签: php drupal filemaker

我正在设置已设置用户访问权限的网站,以便只有登录的成员才能看到某些页面。现在我需要进入并使登录用户的访问更加具体。因此,任何登录的人都可以看到该站点,但有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();
  }
?>

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

2 个答案:

答案 0 :(得分:2)

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

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

如果Drupal正在为页面提供服务,那么你永远不应该像你所展示的那样编写代码,hook_menu注册路径的方式有access callback选项,你可以在那里处理你的访问,或者你可以只需检查用户是否拥有权限。这个东西只适用于你在自定义模块中执行的操作,这就像你正在做的那样。

如果您想要自行拒绝访问权限,则应使用drupal_access_denied函数。

答案 1 :(得分: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();


       }