2010-07-16 126 views
1

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

所以现在我有一个好主意,该怎么做,但有一些作品缺失,我不是很熟悉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(); 
    } 
?> 

任何帮助将不胜感激。另外,让我知道如果我在正确的轨道上,或者如果我需要寻找别的地方。谢谢!

回答

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(); 

这标识了W​​ebAccess布局下的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(); 


     } 
2

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

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

如果Drupal是服务的页面,就像你已经证明,hook_menu这是怎么注册的路径有access callback选项你永远不应该写代码,在那里你可以处理你的访问权限,或者你可以检查用户是否有权限。这个东西只适用于你正在做一个自定义模块中的东西,这就像你在做什么。

在任何方面你应该使用drupal_access_denied函数,如果你想返回自己拒绝访问。

+0

我应该提供更多的背景。关于我的情况,以便我可以更好地了解我需要做什么。我确实同意在Drupal系统上处理用户访问会容易得多,但我用一个已经启动并运行的数据库和已经存在的数据库来接管这个项目。因此,我们已经在我们的Filemaker数据库中拥有数千名用户,并为每个用户检查了正确的框以确定访问权限。此时,手动输入Drupal系统上所有用户的访问限制需要很长时间。 ... – NickPatt 2010-07-20 12:24:38

+0

如果在那里有一个简单的方法来合并数据库或转移一些领域将有所帮助。如果没有,我仍然在寻找一些可以帮助解决我的问题的PHP代码。我只需要进行更具体的访问。另一个快速笔记。我实际上并没有像之前在Drupal页面上显示的那样输入代码。我通常做这样的事情: <?php include($ _ SERVER ['DOCUMENT_ROOT']。'/ folder/filename'); ?> 这调用我们的网络服务器上的文件,这就是我添加的PHP和HTML。我仍在寻找解决方案。如果有人有任何想法,请让我知道。谢谢! – NickPatt 2010-07-20 12:25:58

+0

我同意这条评论 - 如果你使用Drupal,那么你应该使用Drupal用户模块;如果你不使用这样的基本东西,那么你可能不会使用Drupal。我正在研究一个Drupal系统,该系统必须连接到现有的后端数据库,包括用户帐户。我们已经制定了一种机制,使我们的登录名使用后端数据库,但在Drupal中创建与后端数据库匹配的虚拟用户帐户。这使我们可以使用后端数据库登录,但仍然可以获得Drupal用户模块的好处。 – Spudley 2010-10-01 15:24:31

相关问题