NoNaMe :: Использование IIS (с Windows авторизацией) + PHP н

Предлагаю Вашему вниманию готовое решение объединения IIS (используется Windows авторизация) + PHP + домен + сайт на DataLife Engine.

Хотелось бы обратить особенное внимание на то, что IIS + домен чаще всего присутствует на работе — в фирме, предприятии и т.д., поэтому самостоятельную регистрацию на сайте доверить пользователю скорее всего не получится. Редко, кто из системных администраторов на это отважится.

Как я предлагаю реализовать в данном случае работу данного сайта в «корпоративной среде»?
1. Мы используем обязательный искусственный автологон пользователя в сайт, дабы мы могли иметь полный контроль над посетителем-пользователем.
2. Мы запрещаем пользователю менять свое имя, адрес, … — поля в профиле, предварительно изменив файл /templates/userinfo.tpl.

Как тогда регистрировать пользователей?
В любом случае Вы будете вынуждены использовать свои собственные средства для заполнение полей в профиле пользователя. Вы сделаете это единоразово или можете делать это раз в день — все зависит от кличества работников в Вашей организаации и частоте их смены. Возможно, всё за Вас сделает Вами написанный скрипт, выполняемый при первом посещении сайта новым пользователем. Как это сделать — можете решить только Вы.

----------------------<cut>----------------------

1. В /engine/data/config.php в самом конце, перед:

?>

Нужно добавить:
$iis_wa = "yes"; // Используется IIS & Windows Authorization ("yes" или "no")
$my_domen = "GROUP\\"; // Имя домена Windows + 1 или 2 слеша в зависимости от версии PHP — смотреть в phpinfo() в поле $_SERVER['AUTH_USER']

2. В /engine/modules/sitelogin.php перед:
$_POST['login_name'] = mysql_escape_string($_POST['login_name']);

Нужно добавить:
if ($iis_wa == "yes") $_POST['login_name'] = str_replace($my_domen, "", $_SERVER['AUTH_USER']);
else

3. В /engine/modules/sitelogin.php перед:
$member_id = $db->super_query("SELECT * FROM " . PREFIX . "_users where name='{$_POST['login_name']}' and password='".md5($_POST['login_password'])."'");

Нужно добавить:
if ($iis_wa == "yes") $member_id = $db->super_query("SELECT * FROM " . PREFIX . "_users where name='{$_POST['login_name']}'");
else

4. В /engine/modules/sitelogin.php после:
$is_logged = TRUE;
}

Нужно добавить:
else {
$add_time = time()+($config['date_adjust']*60);
if ($_SERVER['HTTP_X_FORWARDED_FOR']) $_IP = $db->safesql($_SERVER['HTTP_X_FORWARDED_FOR']); else $_IP = $db->safesql($_SERVER['REMOTE_ADDR']);

// Сюда пишем все запросы к сторонним базам данных для сбора информации о пользователе, главное чтобы прав хватило (запрос пойдет от имени пользователя).

$db->query("INSERT INTO " . PREFIX . "_users (name, password, email, reg_date, lastdate, user_group, logged_ip) VALUES ('$_POST['login_name']', '', '$_POST['login_name']@$my_domen', '$add_time', '$add_time', '".$config['reg_group']."', '".$_IP."')");}

5. В /engine/modules/sitelogin.php перед:
if (isset($_POST['login']) AND !$is_logged) {

Нужно добавить:
if ($iis_wa == "yes") $_POST['login'] = "submit";

6. В /admin.php перед:
$username = $_POST['username'];
$cmd5_password = md5($_POST['password']);

Нужно добавить:
if ($iis_wa == "yes") $username = str_replace($my_domen, "", $_SERVER["AUTH_USER"]);
else

7. В /admin.php нужно заменить:
if(check_login($username, $cmd5_password))

На это:
if(check_login($username, $cmd5_password, $iis_wa))

8. В /admin.php перед:
if($_REQUEST['action'] == 'dologin'){

Нужно добавить:
if ($iis_wa == "yes") $_REQUEST['action'] = 'dologin';

9. В /engine/inc/functions.inc.php заменить:
function check_login($username, $md5_password) {
global $member_db, $db, $user_group, $lang, $domain;

if ($username == "" OR $md5_password == "") return false;

На это:
function check_login($username, $md5_password, $iis_wa) {
global $member_db, $db, $user_group, $lang, $domain;

if (($iis_wa == "no") AND ($username == "" OR $md5_password == "")) return false;

10. В /engine/inc/functions.inc.php перед:
$db->query("SELECT * FROM " . PREFIX . "_users where name='$username' and password='$md5_password' and banned != 'yes'");

Нужно добавить:
if ($iis_wa == "yes") $db->query("SELECT * FROM " . PREFIX . "_users where name='$username' and banned != 'yes'");
else

Теперь все готово, и если мы в /engine/data/config.php изменим значение переменной $iis_wa на NO, то будет работать прежняя схема авторизации.

Источник: http://nnm.ru/blogs/mcaizer7/ispolzovanie_iis_s_windows_avtorizaciej_php_na_dle/

Яндекс.Метрика Rambler's Top100

© 2000–2012 NoNaMe