Как я могу ограничить доступ пользователей на определенных страницах?(Drupal, php, FileMaker Pro 10) - PullRequest
1 голос
/ 16 июля 2010

Я работаю над веб-сайтом, на котором уже настроен пользовательский доступ, так что только пользователи, вошедшие в систему, могут видеть определенные страницы. Теперь мне нужно войти и сделать доступ для зарегистрированных пользователей более конкретным. Таким образом, любой, кто входит в систему, может видеть сайт, но есть 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 ]

2 голосов
/ 16 июля 2010

Прежде всего, использование Drupal и не использование системы Drupal для хранения информации - плохая идея.Если вы используете Drupal, вы можете использовать внешний источник для входа в систему, но ваши пользователи должны иметь пользователя drupal.

Когда ваши пользователи являются пользователями Drupal, все становится намного проще.Вы можете использовать систему контроля доступа Drupal для проверки доступа и т. Д.

Если Drupal обслуживает страницу, вы никогда не должны писать код, который вы показали, hook_menu, который вы регистрируетеУ пути есть опция access callback, где вы можете управлять своим доступом или просто проверить, есть ли у пользователя разрешение.Этот материал применяется только в том случае, если вы выполняете его в пользовательском модуле, что, по-видимому, и делает.

В любом случае вам следует использовать функцию drupal_access_denied, если выхотите вернуть отказано в доступе.

1 голос
/ 01 октября 2010

Я понял это давным-давно, но я так и не удосужился ответить на вопрос.Итак, вот что я сделал

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

Это идентифицирует текущего пользователя в базе данных Filemaker в макете WebAccess.Выдает сообщение об ошибке, если есть проблема.Теперь, когда я смотрю на текущего пользователя, мне нужно посмотреть, что находится в полях 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();


       }
...