2010-07-16 91 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

相關問題