Використання IIS (з Windows авторизацією) + PHP на DLE

Пропоную Вашій увазі готове рішення об’єднання IIS (використовується Windows авторизація) + PHP + домен + сайт DLE.

Хотілося б звернути особливу увагу на те, що IIS + домен найчастіше присутня на роботі – у фірмі, підприємстві і т. д., тому самостійну реєстрацію на сайті довірити користувачеві швидше за все не вийде, рідко хто з системних адміністраторів на це наважиться…

Як я пропоную реалізувати в даному випадку роботу даного сайту “корпоративної середовищі”?
1. Ми використовуємо обов’язковий штучний автологон користувача на сайт, щоб ми могли мати повний контроль над відвідувачем-користувачем.
2. Ми забороняємо користувачеві змінювати своє ім’я, адресу, … – поля профіль, попередньо змінивши в templates файл userinfo.tpl.

Як тоді реєструвати користувачів?
У будь-якому випадку Ви будете змушені використовувати свої власні кошти для заповнення полів у профілі користувача.
Ви зробите це одноразово або можете робити це раз на день – все залежить від кличества працівників у Вашій организаации і частоті їх зміни. Можливо все за Вас зробить Вами написаний скрипт, що виконується при першому відвідуванні сайту новим користувачем. Як це зробити – можете вирішити тільки Ви.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1. в engine/data/config.php в самому кінці перед

?>
додати

// Використовується IIS & Windows Authorization
$iis_wa = true;
// Ім’я домену Windows + 1 або 2 слеша в залежності від версії PHP – дивитися в phpinfo() в поле $_SERVER[“AUTH_USER”]
$my_domen = “GROUP\\”;

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

2. в engine/modules/sitelogin.php перед

$_POST[‘login_name’] = mysql_escape_string($_POST[‘login_name’]);
додати

if($iis_wa) $_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) $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) $_POST[‘login’] = “submit”;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

6. в admin.php перед

$username = $_POST[‘username’];
$cmd5_password = md5($_POST[‘password’]);
додати

if($iis_wa) $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) $_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) 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) $db->query(“SELECT * FROM” . PREFIX . “_users where name=’$username’ and banned != ‘yes'”);
else

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Тепер все готово і якщо ми в engine/data/config.php закомментіруем

$iis_wa = true;

або поставимо false, то буде працювати колишня схема авторизації.

Питання? :fellow:
90