2010-07-16 4 views
1

로그인 한 회원 만 특정 페이지를 볼 수 있도록 이미 사용자 액세스 권한이 설정된 웹 사이트에서 작업하고 있습니다. 이제 로그인하여보다 구체적인 로그인 사용자에게 액세스 권한을 부여해야합니다. 따라서 로그인 한 사용자는 사이트를 볼 수 있지만 PDQ 또는 Comm Plus 액세스 권한이있는 사용자 만 액세스해야하는 2 페이지 (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(); 

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


     } 
2

우선, Drupal 시스템을 사용하지 않고 정보를 저장하는 것은 나쁜 생각입니다. 드루팔 (Drupal)을 사용하는 경우, 외부 소스를 사용하여 로그인을 할 수 있지만 사용자에게는 드루팔 (drupal) 사용자가 있어야합니다.

사용자가 Drupal 사용자 일 때 많은 일이 훨씬 쉬워집니다. Drupal 액세스 제어 시스템을 사용하여 액세스를 확인할 수 있습니다.

Drupal이 페이지를 제공하는 경우 코드를 작성하면 안됩니다. 경로를 등록하는 방법 인 hook_menu은 처리 할 수있는 access callback 옵션이 있습니다. 귀하의 액세스, 또는 사용자가 허가를 받았는지 여부 만 확인할 수 있습니다. 이 항목은 사용자 정의 모듈에서 작업을 수행하는 경우에만 적용되며, 사용자가 수행하는 것처럼 보입니다.

액세스 거부로 돌아가고 싶다면 drupal_access_denied 함수를 사용해야합니다.

+0

아마도 조금 더 배경을 제공해야합니다. 내 상황에 따라 내가해야 할 일에 대해 더 잘 알게 될지도 모른다. 드루팔 (Drupal) 시스템에 대한 사용자 액세스를 다루는 것이 훨씬 쉬울 것이라는 데 동의하지만, 이미 설치되어 실행중인 웹 사이트와 데이터베이스를 이미 사용하고 있습니다. 따라서 우리는 Filemaker 데이터베이스에 수천 명의 사용자를 이미 보유하고 있으며 각 사용자가 액세스를 확인하기 위해 올바른 상자를 확인했습니다. 이 시점에서 Drupal 시스템의 모든 사용자에 대한 액세스 제한을 수동으로 입력하는 것은 너무 오래 걸립니다. .... – NickPatt

+0

데이터베이스를 병합하거나 일부 필드를 전송하는 간단한 방법이 도움이 될 것입니다.그렇지 않다면 나는 여전히 내 문제를 도울 수있는 PHP 코드를 찾고있다. 더 구체적인 액세스 권한을 부여하면됩니다. 또 다른 빠른 메모. 이전에 드루팔 (Drupal) 페이지에 표시된 코드를 실제로 입력하지 마십시오. 나는 보통 이런 식으로 처리한다. 이 파일은 우리 웹 서버의 파일을 호출하고 php 및 html로 추가합니다. 나는 여전히 해결책을 찾고있다. 아무도 아이디어가 있다면 알려주세요. 감사! – NickPatt

+0

나는이 의견에 동의한다. Drupal을 사용하고 있다면 Drupal 사용자 모듈을 사용해야한다. 만약 당신이 그런 기본적인 것들을 사용하지 않으면 Drupal을 전혀 사용하지 않을 수도 있습니다. 나는 사용자 계정을 포함하여 기존 백엔드 데이터베이스에 연결해야하는 Drupal 시스템에서 작업하고 있습니다. 우리는 로그인이 백엔드 DB를 사용하지만 백엔드의 것과 일치하는 Drupal에서 더미 사용자 계정을 만드는 메커니즘을 개발했습니다. 이를 통해 우리는 백엔드 DB를 사용하여 로그인 할 수 있지만 Drupal 사용자 모듈의 이점을 여전히 얻습니다. – Spudley

관련 문제