我正在设置已设置用户访问权限的网站,以便只有登录的成员才能看到某些页面。现在我需要进入并使登录用户的访问更加具体。因此,任何登录的人都可以看到该站点,但有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();
}
?>
非常感谢任何帮助。另外,如果我在正确的轨道上或者我需要在其他地方寻找,请告诉我。谢谢!
答案 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();
}