OpenSource
<#"552427.files/image003.gif">
Рис. 5. Регистрационная форма
Необходимо заполнить следующие поля:
- Логин- указать желаемый логин;
- Пароль- указать желаемый пароль, который будет впоследствии
использоваться для авторизации в системе;
- Повторите пароль- повторить введенный ранее пароль;
- Эл. адрес- указать адрес электронной почты, на который будет
отправлено письмо для подтверждения регистрации;
- Код подтверждения- необходимо ввести код подтверждения,
указанный на картинке.
После заполнения полей надо нажать кнопку «зарегистрировать».
) После нажатия кнопки запускаются специальные функции для проверки
корректности заполнения всех полей формы.
Не допускается ввод пустых значений (то есть нельзя оставлять
незаполненные поля).
Происходит проверка правильности введенного адреса электронной почты, в
данном случае адрес должен соответствовать заданному шаблону имя@домен.ru(/com/org и
т.п).
Длина всех строк для ввода информации в форму ограничена, а также
запрещены специальные символы в целях обеспечения безопасности.
Организована проверка соответствия кода подтверждения введенному
значению.
) Если все поля формы заполнены корректно, информация о пользователе
попадает в базу данных потенциальных пользователей, пользователь определяется в
группу «Потенциальных пользователей»
) Происходит автоматическая отправка письма подтверждения регистрации на
указанный адрес электронной почты, которое содержит ссылку для активации
учетной записи. Письмо представлено на рис. 6.
Рис. 6. Письмо подтверждения регистрации
5) Пользователь, получив письмо для подтверждения регистрации, нажимает
ссылку и активирует свою учетную запись.
) После активации учетной записи пользователь получает доступ к своему
«Личному кабинету» с ограниченным набором функциональных возможностей, в
который он может попасть только после прохождения процедуры аутентификации и
авторизации.
На этом завершается первый этап регистрации, алгоритм которого
представлен на рис. 7.
Рис. 7. Алгоритм 1 этапа регистрации новых пользователей
Второй этап регистрации.
) Авторизовавшись в системе, пользователь (абитуриент либо потенциальный
сотрудник вуза) должен предоставить подробную информацию о себе, заполнив
специальную анкету.
) Дополнительная информация о пользователе попадает в базу данных
потенциальных пользователей, а затем проходит проверку в соответствующем
подразделении вуза.
) После прохождения проверки, если информация верна, данные о
пользователе попадают в базу данных «Реальных пользователей», сюда же попадает
информация о сотруднике вуза, который проверял документы и достоверность
предоставленной информации.
) В том случае, если абитуриент поступил в СПбГУТ, либо потенциальный
сотрудник получил работу в вузе, эти пользователи получают доступ к «Личному
кабинету» с полным набором функциональных возможностей.
На этом завершается регистрация нового пользователя в системе.
Алгоритм 2 этапа регистрации новых пользователей представлен на рис. 8.
Рис. 8. Алгоритм 2 этапа регистрации новых пользователей
4.3 Выбор вида авторизации и его реализация
.3.1 Авторизация средствами web-сервера
Авторизация - это процесс подтверждения (проверки) прав пользователей на
выполнение некоторых действий.
Для ограничения доступа к некоторым файлам можно использовать встроенные
в Web-сервер Apache средства ограничения доступа.
В конфигурационном файле Apache httpd.conf можно указать необходимые
параметры:
- AuthName "Private Zone" -название защищенной зоны;
- AuthType Basic - тип;
- AuthUserFile -путь к файлу с паролями.
Этот файл должен быть создан в особом формате, так как пароли в
нем хранятся в зашифрованном виде.
После соответствующих настроек при попытке запроса любого ресурса из
защищенной папки посетителю будет выдан стандартный запрос логина и
пароля, вид которого представлен на рис. 9.
Рис.
9. Запрос на вход в папку
4.3.2
Авторизация с помощью заголовка
В
PHP есть команда Header - она позволяет отправить браузеру посетителя,
запросившему страницу с содержащим эту команду сценарием, определенную
служебную информацию - так называемый "заголовок". Для авторизации
нам потребуется заголовок "WWW-Authenticate".
В
том случае, если браузер получает заголовок "WWW-Authenticate", то он
выдает посетителю стандартное окно для ввода логина и пароля (рис. 9.).
Этот
вид авторизации тоже реализуется стандартными средствами web-сервера.
Преимущества
1 и 2 вида авторизации:
- функции ограничения доступа встроены в Web-сервер Apache,
поэтому нет необходимости создавать что-то новое;
- высокая степень надежности;
- не задействованы cookies.
Недостатки:
- перенос файлов на другой сервер требует воссоздания .htpassw
по новой;
- довольно утомительно осуществлять смену пароля;
- для создания файла с паролями необходимо специальное ПО;
- стандартный вид;
- проверка правильности логина и пароля осуществляется на
каждой странице, где требуется авторизованный доступ. Если посетителей на сайте
не очень много, то это вполне допустимо, однако при большом числе
авторизованных посетителей нагрузка на web-сервер может оказаться немалой.
4.3.3 Авторизация с помощью cookies
Cookie - это файл в специальном формате, который присылается сервером
браузеру посетителя сайта, расположенном на этом сервере. Браузер, если он
поддерживает cookie (и эта поддержка в нем не отключена), помещает его в особое
место и впоследствии отправляет назад на сервер при поступлении от него
запроса.можно установить (т.е. прислать на компьютер посетителя) и средствами
PHP. Для этого используется команда SetCookie, имеющая параметры:
- имя cookie;
- информация, записанная в cookie;
- время жизни cookie.
Преимущества:
- простота реализации;
- удобство использования.
Недостатки:
- некоторые пользователи ОТКЛЮЧАЮТ cookie;
- проверка правильности логина и пароля осуществляется на
каждой странице, поэтому возрастает нагрузка на web-сервер;
- низкая степень надежности.
Во-первых, cookie с этими данными сохраняется на компьютере посетителя, а
значит, теоретически может быть с него похищен.
Во-вторых, возможность захода на web-страницу "защищенной зоны"
в течение некоторого времени без необходимости ввода логина и пароля может
привести и к нежелательным последствиям - если посетитель забудет зайти на
страницу выхода, то любой, кто воспользуется его компьютером до истечения срока
действия cookie, с точки зрения сервера будет вполне легальным пользователем.
4.3.4 Авторизация с помощью сессий
"Сессия" - несколько абстрактное понятие, означающее нечто
вроде "законченного периода работы с сайтом".
С помощью команд "поддержки сессий" PHP можно при заходе
посетителя на сайт запоминать какие-либо переменные и потом эти переменные
считывать или изменять на других страницах этого сайта. При этом в браузер
посетителя передаются не сами эти переменные, а некий пароль, по которому
сервер впоследствии этот браузер узнает и восстановит именно те значения
переменных, которые были установлены для данного посетителя.
Иными словами - работа механизма сессий в PHP происходит так: Когда
посетитель заходит на сайт и для него устанавливаются какие-либо переменные
(сам ли он их вводит или, скажем, они берутся из базы данных), то команды
начала и регистрации сессии сохраняют эти переменные в определенном месте на
самом сервере .
Если у посетителя браузер принимает cookie, то ему высылается cookie (с
определенным именем - по умолчанию "PHPSESSID"), содержащий так
называемый "идентификатор сессии" , а если нет, то web-сервер
автоматически помещает данный идентификатор в переменную PHPSESSID в каждую
ссылку на выдаваемых посетителю страницах сайта (естественно,
"внутреннюю" - то есть ведущую на другие страницы того же самого
сайта, с тем же самым доменным именем). Таким образом, идентификатор передается
на сервер при каждом заходе посетителя на какую-либо из страниц сайта, будучи
либо взятым из соответствующего cookie, установленного посетителю при открытии
сессии, либо из адресной строки ссылки, куда этот идентификатор автоматически
помещается web-сервером.
Преимущества:
- проверка правильности логина и пароля осуществляется
единожды;
- возможна авторизация и с включенными и с выключенными
cookies. Этот метод можно применять при большом числе посетителей.
Недостатки:
- Необходимо применить дополнительные меры безопасности при
передаче параметров сессии.
Учитывая описанные достоинства и недостатки всех видов авторизации,
оптимальным методом для реализации в работе по созданию системы доступа для
Web-портала СпбГУТ будет авторизация с помощью сессий, так как при большом
числе посетителей этот метод более приемлем за счет того, что проверка
логина/пароля происходит единожды, а следовательно не будет перегрузки сервера,
а также за счет независимости от cookies возможен охват большего числа
посетителей. Этот метод отличается простотой, удобством использования и
достаточно высокой степенью надежности, что является решающим аргументом в его
пользу.
.3.5 Реализация алгоритма авторизации
Рассмотрим как реализован алгоритм авторизации в рамках данной работы.
На главной странице портала расположен блок авторизации, содержащий поля
для ввода логина и пароля, представленный на рис. 10.
Рис. 10. Главная страница портала с блоком авторизации
Блок авторизации выглядит, как представлено на рис. 11.
Рис. 11. Блок авторизации
Для прохождения процедуры авторизации, необходимо ввести логин и пароль и
нажать кнопку «Войти».
После нажатия кнопки запускается механизм аутентификации.
4.4 Применение механизма аутентификации
Аутентификация - проверка принадлежности субъекту доступа
предъявленного им идентификатора
<#"552427.files/image010.gif">
Рис. Одна итерация алгоритма SHA1
Инициализация.
Исходное сообщение разбивается на блоки по 512 бит в каждом. Последний
блок дополняется до длины, кратной 512 бит. Сначала добавляется 1 а потом нули,
чтобы длина блока стала равной (512 - 64 = 448) бит. В оставшиеся 64 бита
записывается длина исходного сообщения в битах.
Если последний блок имеет длину более 448, но менее 512 бит, дополнение
выполняется следующим образом: сначала добавляется 1, затем нули вплоть до
конца 512-битного блока; после этого создается ещё один 512-битный блок,
который заполняется вплоть до 448 бит нулями, после чего в оставшиеся 64 бита
записывается длина исходного сообщения в битах. Дополнение последнего блока
осуществляется всегда, даже если сообщение уже имеет нужную длину.
Инициализируются пять 32-битовых переменных.
Криптоанализ.
Криптоанализ хеш-функций направлен на исследование уязвимости к
различного вида атакам. Основные из них:
•нахождение коллизий - ситуация, когда двум различным исходным сообщениям
соответствует одно и то же хеш-значение.
•нахождение прообраза - исходного сообщения - по его хешу.
При решении методом «грубой силы»:
•вторая задача требует 2160 операций.
•первая же требует в среднем 2160/2 = 280 операций
От устойчивости хеш-функции к нахождению коллизий зависит безопасность
электронной цифровой подписи с использованием данного хеш-алгоритма. От
устойчивости к нахождению прообраза зависит безопасность хранения хешей паролей
для целей аутентификации.
В январе 2005 года Vincent Rijmen и Elisabeth Oswald опубликовали
сообщение об атаке на усеченную версию SHA-1 (53 раунда вместо 80), которая
позволяет находить коллизии меньше, чем за 280 операций.
В феврале 2005 года Сяоюнь Ван, Йицунь Лиза Йинь и Хунбо Ю представили
атаку на полноценный SHA-1, которая требует менее 269 операций.
Данный алгоритм шифрования, по оценкам специалистов, обладает высокой
степенью надежности и рекомендован для обеспечения высокого уровня безопасности
передаваемой информации, поэтому было принято решение использовать этот
алгоритм шифрования при передаче паролей от пользователя к системе сервера.
5.4 Применение CAPTCHA
CAPTCHA (от англ. «Completely Automated Public Turing test to tell
Computers and Humans Apart» - полностью автоматизированный публичный тест
Тьюринга для различия компьютеров и людей) - компьютерный тест, используемый
для того, чтобы определить, кем является пользователь системы: человеком или
компьютером.
В Интернете среди русскоязычных пользователей часто транскрибируется как
капча.
Термин появился в 2000 году. Основная идея теста: предложить пользователю
такую задачу, которую может решить человек, но которую несоизмеримо сложно
предоставить для решения компьютеру. В основном это задачи на распознавание
символов.
Применяются CAPTCHA для того, чтобы предотвратить множественные
автоматические регистрации и отправления сообщений программами-роботами.
В модуле системы доступа на странице регистрации новых пользователей
применяется captcha, которая представляет собой рисунок в искажённом виде,
содержащий цифровой код, который необходимо ввести в поле «Код подтверждения».
После ввода этого кода происходит проверка правильности введенного
значения кода подтверждения и если значение верно, то регистрация учитывается
сервером и информация о пользователе попадает а базу данных.
Captca,
применяемая при регистрации новых пользователей выглядит следующим образом:
Рис. Вид Captca (кода подтверждения)
В данном случае код подтверждения равен 616574
Применение этого компьютерного теста защищает созданную информационную
систему от автоматических регистраций и позволяет предотвратить заполнение базы
данных ненужной информацией
ЗАКЛЮЧЕНИЕ
Результатом работы является полностью завершенный модуль системы доступа
к ресурсам веб-портала СПбГУТ, представляющий собой совокупность механизмов
распределения прав доступа к информационным ресурсам вуза и предусматривающий
возможность регистрации новых пользователей, прохождения механизма
аутентификации и авторизации зарегистрированных пользователей в системе,
создание групп пользователей и объединение пользователей в группы,
обеспечивающий достаточный уровень безопасности информационных ресурсов
веб-портала.
Разработанный модуль обеспечивает необходимый уровень доступа
пользователей к информационным ресурсам и входит в состав образовательного
веб-портала СПбГУТ , который должен стать инструментом повседневной
деятельности студентов и сотрудников СПбГУТ, а также предоставлять определенную
информацию для любых посетителей веб-портала.
Разработка снабжена предельно полной документацией и комментариями к
программному коду, что дает возможность дальнейшей модернизации системы в
зависимости от потребностей вуза и новых условий, развития и наращивания
системы, а также исключает зависимость от конкретного разработчика системы.
Гибкость системы заключается в возможности подключения неограниченного
числа модулей к существующей системе, возможности создания бесконечного
количества новых групп пользователей с неограниченным количеством пользователей
и предоставления каждому из пользователей своего уникального набора прав
доступа к информационным ресурсам веб-портала.
ПРИЛОЖЕНИЯ
Приложение 1. Системные требования
Требования к серверному программному обеспечению.
Для корректной работы системы требуется следующее программное
обеспечение:
· операционная система семейства Windows или Unix или MacOS;
· Apache v. 2.2 или выше;
· PHP v. 5.0 или выше;
· MySQL v. 5.0 или выше;
· ZendFramework 1.10 или
выше/
Требования к клиентскому программному обеспечению.
Для корректной работы разработанной системы пользователю требуется:
· Браузер
Приложение 2. Список файлов
Название папки
|
Название файла
|
Выполняемые функции
|
Стр
|
www
|
auth. php
|
выполняет авторизацию
зарегистрированных польз.
|
76
|
|
AUTHform.html
|
форма авторизации
зарегистрированных польз.
|
92
|
|
DB_users.php
|
создает БД REG
и таблицу USERS
|
77
|
|
config.inc.php
|
файл конфигурации с данными
для MySQL
|
79
|
|
functions.inc.php
|
файл с функциями (проверка/
отправка почты)
|
80
|
|
gut_acl.php
|
Скрипт распределения прав
доступа
|
80
|
|
output_login.php
|
Скрипт для вывода логина
авторизованного пользователя в «Личном кабинете»
|
89
|
|
output_users.php
|
Вывод информации о
зарегистрированных пользователях из БД REG (DB_users.php)
|
89
|
|
REGform.html
|
форма регистрации
пользователей
|
92
|
|
Registration.php
|
осуществляет регистрацию
пользователей
|
86
|
www/img
|
capcha.php
|
организация кода
подтверждения
|
91
|
|
Addict.ttf
|
файл шрифтов
|
-
|
|
1.jpeg
|
Картинка для кода
подтверждения
|
-
|
|
2.jpeg
|
Картинка для кода
подтверждения
|
-
|
|
3.jpeg
|
Картинка для кода
подтверждения
|
-
|
www/tpl
|
default.php
|
Шаблон
|
92
|
Название папки
|
Название файла
|
Выполняемые функции
|
Стр
|
www/real_users
|
R_auth.
php
|
выполняет авторизацию
зарегистированных польз.
|
93
|
|
R_AUTHform.html
|
форма авторизации
зарегистированных польз.
|
-
|
|
university8.php
|
создает БД учета
успеваемости
|
-
|
|
config.inc.php
|
файл конфигурации с данными
для MySQL
|
-
|
|
R_gut_acl.php
|
Скрипт распределения прав доступа
|
96
|
|
sem_show.php
|
Вывод данных о
логинах/паролях пользователей из БД university8 (учета успеваемости)
|
-
|
|
R_output_login
|
Скрипт для вывода логина
авторизованного пользователя группы «Реальных пользователей» в «Личном
кабинете»
|
95
|
www/ real_users/tpl
|
default.php
|
Шаблон
|
-
|
www/ real_users/resourses
|
redakt_ocenki_metodist.php
|
Ресурс редактирования
оценок, доступный для подгруппы «Методист»
|
-
|
|
obzor_ocenki_prep.php
|
Ресурс просмотра оценок
группы, доступный для подгруппы «Преподаватель»
|
-
|
|
ocenki_stud.php
|
Ресурс просмотра оценок,
доступный для подгруппы «Студент»
|
-
|
www/ /library
|
Acl.php
Role.php+Resource.php и др.
|
Библиотека классов ZendFramework
|
-
|
Листинг скрипта auth. php:
<?php
// Инициализируем начало сессии_start();
//Поключаем файл конфигурации("config.inc.php");
//Подключаемся к БД
$link = mysql_connect($DBSERVER, $DBUSER, $DBPASS)
or die("Не могу подключиться" );
// сделать $DB текущей базой данных_select_db($DB, $link) or die ('Не
могу выбрать БД');
//Если нет сессий(md5(crypt($_SESSION['user'],$_SESSION['password']))
!= $_SESSION['SID'])
{
//Если кнопка не нажата, отображаем форму(!$_POST['do']){
//Вывод ФОРМЫ авторизации("AUTHform.html");
}
//Если кнопка нажата
if($_POST['do']) {
//Проверяем данные
$login = $_POST['login'];
$upass = $_POST['password'];($login !='' AND $upass !='') {
//Создаем запрос
$q1=mysql_query("SELECT * FROM users WHERE
nick='".$login."' AND password='".md5($upass)."' AND status=1");
//Проверяем существует ли хоть одна запись
if(mysql_num_rows($q1)===1) {
//Если есть, то создаем сессии и перенаправляем на эту страницу
$r=mysql_fetch_array($q1);
$_SESSION['user'] = $r['nick'];
$_SESSION['password'] = $r['password'];
$_SESSION['SID'] = md5(crypt($r['nick'],$r['password']));
//скрипт РАСПРЕДЕЛЕНИЯ ПРАВ ДОСТУПА("gut_acl.php");
//скрипт для вывода логина авторизованного пользователя+ кнопки
управления
include("output_login.php");
@Header("Location: auth.php");
}{echo 'Неверный логин/пароль; Возможно Ваш аккаунт не активирован';}
}{echo 'Введите данные';}
}
}{
скрипт для вывода логина авторизованного пользователя+ кнопки
управления("output_login.php");
блок для вывода шаблонов страниц портала
if($_GET['page'] !='') {
@include("tpl/".$_GET['page'].".php");
}{ @include("tpl/default.php");}
}($_GET['exit']) {@session_destroy(); unset($_GET['exit']);
mysql_close($link); @Header("Location: auth.php");}
?>
Листинг скрипта DB_users.php:
<html>
<head>
<title>Create DataBase</title>
<meta charset=Windows-1251">
</head>
<body>
<?php
// Подключаемся к MySQL("SERVER", "localhost");("USERNAME",
"root");("PASSWORD", "");
$link = mysql_connect (SERVER, USERNAME, PASSWORD);( !$link )
die ("Couldn't connect to MySQL");
// Создаем базу данных REG
$DB= mysql_query('CREATE DATABASE if not exists REG');(!$DB)
{("<br><b>Ошибка! Не
удалось создать базу данных</b> %s",
mysql_error()."<br>");
}
{"<br><b> База данных создана
успешно</b><br>";
}
//Сделаем REG текущей базой данных
$registr = mysql_select_db('REG', $link);
if (!$registr)
{("<br><b>База данных недоступна</b> %s", mysql_error()."<br>");
}
{"<br><b>Соединение с базой данных
установлено</b><br>";
}
// Создаем таблицу users
$DB_t1 = mysql_query('CREATE TABLE users
( id INT( 6 ) NOT NULL AUTO_INCREMENT PRIMARY KEY,VARCHAR( 30
) NOT NULL,VARCHAR( 50 ) NOT NULL,VARCHAR( 50 ) NOT NULL,_id VARCHAR( 50 ) NOT
NULL,INT( 1 ) NOT NULL,_date INT( 8 ) NOT NULL,INT( 8 ) NOT NULL )
');(!$DB_t1)
{("<br><b>Не удалось создать
таблицу users</b> %s",
mysql_error()."<br>");
}
{"<br><b>Таблица users создана успешно </b><br>";
}
//Завершаем работу с БД(!mysql_close($link))
{"<br><b>Не удалось завершить соединение с базой
данных</b><br>";
}
{"<br><b>Соединение с базой данных завершено
успешно</b><br>";
}
?>
</body>
</html>
Листинг скрипта config.inc.php:
<?php
//Файл конфигурации с данными для MySQL:
//Сервер
$DBSERVER = "localhost";
//Пользователь
$DBUSER = "root";
// Пароль
$DBPASS = "";
//База данных
$DB = "REG";
?>
Листинг скрипта functions.inc.php:
<?php
// Файл с функциями
//Функция проверки корректности введенного e-mail'а
function checkmail($mail) {
// удаляем крайние
пробелы
$mail=trim($mail);
// если пусто - выход
if (strlen($mail)==0) return
-1;(!preg_match("/^[a-z0-9_-]{1,20}+(\.){0,2}+([a-z0-9_-]){0,5}@(([a-z0-9-]+\.)+(com|net|org|mil|".
"edu|gov|arpa|info|biz|inc|name|[a-z]{2})|[0-9]{1,3}\.[0-9]{1,3}\.[0-".
"9]{1,3}\.[0-9]{1,3})$/is",$mail))-1;$mail;
}
//Функция отправки почтыsendmail($mail,$subject,$message,$headers)
{(mail($mail,$subject,$message,$headers))
{ return TRUE;}{return FALSE;}
}
?>
Листинг скрипта gut_acl.php:
<?php
// Путь к файлам с классами Zend'а
set_include_path('library');
// Подключаем необходимые классы_once 'Zend/Acl.php';_once
'Zend/Acl/Role.php';_once 'Zend/Acl/Resource.php';
// Создание списка контроля доступа ACL (объект Zend_Acl)
$acl = new Zend_Acl();
// ДОБАВЛЕНИЕ ПОЛЬЗОВАТЕЛЕЙ(РОЛЕЙ)
// Выполним добавление ГРУПП пользователей
//ГРУППА действующих(реальных) пользователей
$acl->addRole(new Zend_Acl_Role('users_group'))
//Подгруппа учащиеся=group_std
>addRole(new Zend_Acl_Role('group_std'), 'users_group')
//Подгруппа сотрудники=group_sotrud
>addRole(new Zend_Acl_Role('group_sotrud'),'users_group');
//ГРУППА возможных(потенциальных) пользователей
$acl->addRole(new Zend_Acl_Role('pt_users_group'))
//подгруппа потенциальные учащиеся=pt_group_std
->addRole(new Zend_Acl_Role('pt_group_std'),
'pt_users_group')
//подгруппа потенциальные сотрудники=pt_group_sotrud
->addRole(new Zend_Acl_Role('pt_group_sotrud'),
'pt_users_group');
// Добавление пользователей без наследования прав
// пользователь ГОСТЬ
$acl->addRole(new Zend_Acl_Role('guest'))
// АДМИНИСТРАТОР web-портала
>addRole(new Zend_Acl_Role('admin'))
// Добавление ПОДГРУПП пользователей с наследованием прав от 3-х
категорий
//Подгруппы действующих(реальных) пользователей:
//Подгруппа группы сотрудники МЕТОДИСТ=metodist
->addRole(new
Zend_Acl_Role('metodist'),array('guest','users_group', 'group_sotrud' ))
//Подгруппа группы
сотрудники преподаватель=prepodavatel
>addRole(new Zend_Acl_Role('prepodavatel'),
array('guest','users_group', 'group_sotrud' ))
//Подгруппа группы сотрудники администрация(административная
должность)=administration
->addRole(new Zend_Acl_Role('administration'),
array('guest','users_group', 'group_sotrud' ))
//Подгруппа группы
учащиеся СТУДЕНТ=student
>addRole(new Zend_Acl_Role('student'),array('guest','users_group',
'group_std' ))
//Подгруппа группы
учащиеся АСПИРАНТ=aspirant
>addRole(new Zend_Acl_Role('aspirant'),
array('guest','users_group', 'group_std' ))
//Подгруппа группы учащиеся РОДИТЕЛИ=roditeli :-)
->addRole(new Zend_Acl_Role('roditeli'),
array('guest','users_group', 'group_std' ))
//Подгруппы возможных(потенциальных) пользователей (аналогично
предыдущему блоку)
->addRole(new
Zend_Acl_Role('pt_metodist'),array('guest','pt_users_group', 'pt_group_sotrud'
))
>addRole(new Zend_Acl_Role('pt_prepodavatel'),
array('guest','pt_users_group', 'pt_group_sotrud' ))
>addRole(new Zend_Acl_Role('pt_administration'),
array('guest','pt_users_group', 'pt_group_sotrud' ))
>addRole(new Zend_Acl_Role('pt_student'),array('guest','pt_users_group',
'pt_group_std' ))
>addRole(new Zend_Acl_Role('pt_aspirant'),
array('guest','pt_users_group', 'pt_group_std' ))
>addRole(new Zend_Acl_Role('pt_roditeli'),
array('guest','pt_users_group', 'pt_group_std' ));
// ДОБАВЛЕНИЕ РЕСУРСОВ
// defaultModule- МОДУЛЬ ПО УМОЛЧАНИЮ
$acl->add(new Zend_Acl_Resource('defaultModule'));
// UserController (общие функции)
$acl->add(new Zend_Acl_Resource('UserController'),
'defaultModule');
$acl->add(new Zend_Acl_Resource('registerAction'),
'UserController');
$acl->add(new Zend_Acl_Resource('loginAction') ,
'UserController');
$acl->add(new Zend_Acl_Resource('logoutAction') ,
'UserController');
// SiteController (страницы-разделы портала)
$acl->add(new Zend_Acl_Resource('SiteController'),
'defaultModule');
$acl->add(new Zend_Acl_Resource('news') ,
'SiteController');
$acl->add(new Zend_Acl_Resource('about') ,
'SiteController');
$acl->add(new Zend_Acl_Resource('history') ,
'SiteController');
$acl->add(new Zend_Acl_Resource('structure'),
'SiteController');
$acl->add(new Zend_Acl_Resource('documrnts'),
'SiteController');
$acl->add(new Zend_Acl_Resource('education'),
'SiteController');
// UzoneController (личные
кабинеты)
$acl->add(new Zend_Acl_Resource('UzoneController'),
'defaultModule');
$acl->add(new Zend_Acl_Resource('cabinet'),
'UzoneController');
// uchet_uspevModule- МОДУЛЬ
УЧЕТА УСПЕВАЕМОСТИ
$acl->add(new Zend_Acl_Resource('uchet_uspevModule'));
// SpecController (должностные функции)
$acl->add(new Zend_Acl_Resource('SpecController'),
'uchet_uspevModule');
$acl->add(new Zend_Acl_Resource('redakt_ocenki_metodist')
, 'SpecController');
$acl->add(new Zend_Acl_Resource('obzor_ocenki_prep') ,
'SpecController');
$acl->add(new Zend_Acl_Resource('ocenki_stud') ,
'SpecController');
//РАСПРЕДЕЛЕНИЕ РОЛЕЙ
$role='guest';(isset($_SESSION['SID']) )
{
//**подключить БД REG (в которой хранится таблица users-
возможных(потенциальных) пользователей)
$db_REG=mysql_select_db('REG', $link) or die ('Can\'t use REG
: ' . mysql_error());(!$db_REG)
{("<br><b>Database REG connection
error!</b> %s", mysql_error()."<br>");
}
{"<br><b>Database POTENTIAL_USERS(=REG)
online</b><br>";
}
$q00 = @mysql_query("SELECT * FROM users WHERE
nick='".$_SESSION['user']."' AND
password='".$_SESSION['password']."'");(@mysql_num_rows($q00)==1)
{$role='pt_users_group';'Группа: ', $role, '<br />';}
}
//УСТАНОВКА ПРАВ ДОСТУПА К РЕСУРСАМ
// Разрешаем администратору портала все действия
$acl->allow('admin');
//Права доступа для гостя
// Разрешаем доступ к контроллеру UserController пользователю guest(гость)
$acl->allow('guest', 'UserController');
// Разрешаем доступ к контроллеру SiteController пользователю
guest(гость)
$acl->allow('guest', 'SiteController');
// Запрещаем доступ к контроллеру UzoneController пользователю
guest(гость)
$acl->deny('guest', 'UzoneController');
// Запрещаем доступ к контроллеру SpecController пользователю
guest(гость)
$acl->deny('guest', 'SpecController');
//Права доступа для подгруппы УЧАЩИЕСЯ
// Разрешаем доступ к контроллеру UserController группе
group_std(учащиеся)
$acl->allow('group_std', 'UserController');
// Разрешаем доступ к контроллеру SiteController группе
group_std(учащиеся)
$acl->allow('group_std', 'SiteController');
// Разрешаем доступ к контроллеру UzoneController группе
group_std(учащиеся)
$acl->allow('group_std', 'UzoneController');
// Запрещаем доступ к контроллеру SpecController группе
group_std(учащиеся)
$acl->deny('group_std', 'SpecController');
//Права доступа для подгруппы СОТРУДНИКИ
// Разрешаем доступ к модулю 'defaultModule' группе
group_sotrud(сотрудники)
$acl->allow('group_sotrud', 'defaultModule');
// Разрешаем доступ к контроллеру UzoneController группе
group_sotrud(сотрудники)
$acl->allow('group_sotrud', 'UzoneController');
// Разрешаем доступ
к ресурсу redakt_ocenki_metodist контроллера SpecController подгруппе metodist
$acl->allow('metodist', 'redakt_ocenki_metodist');
// Разрешаем доступ
к ресурсу obzor_ocenki_prep контроллера SpecController подгруппе prepodavatel
$acl->allow('prepodavatel', 'obzor_ocenki_prep');
// Разрешаем доступ
к ресурсу ocenki_stud контроллера SpecController подгруппе student
$acl->allow('student', 'ocenki_stud');
//ПРОВЕРКА ПРАВ ДОСТУПА'ACCESS CONTROL LIST:', '<br
/>';'Access to defaultModule for admin ', $acl->isAllowed('admin',
'defaultModule') ? "allowed" : "denied", '<br
/>';'Access to UserController for guest ', $acl->isAllowed('guest',
'UserController' ) ? "allowed" : "denied", '<br
/>';'Access to UzoneController for guest ',$acl->isAllowed('guest',
'UzoneController' ) ? "allowed" : "denied", '<br />';'Access
to SpecController for group_std
',$acl->isAllowed('group_std','SpecController') ? "allowed" :
"denied", '<br />';'Access to SpecController for group_sotrud
', $acl->isAllowed('group_sotrud','SpecController') ? "allowed" :
"denied", '<br />';'Access to redakt_ocenki_metodist for
metodist ', $acl->isAllowed('metodist','redakt_ocenki_metodist') ?
"allowed" : "denied", '<br />';'Access to
obzor_ocenki_prep for prepodavatel ',
$acl->isAllowed('prepodavatel','obzor_ocenki_prep') ? "allowed" :
"denied", '<br />';'Access to ocenki_stud for student ',
$acl->isAllowed('student','ocenki_stud') ? "allowed" :
"denied", '<br />';
//Вывод ресурсов($acl->isAllowed($role, 'redakt_ocenki_metodist')) {
// код для вывода ссылки на ресурс
echo '<br/><br/><a
href="resourses/redakt_ocenki_metodist.php">редактировать оценки</a>';
}($acl->isAllowed($role, 'obzor_ocenki_prep')) {
// код для вывода ссылки на ресурс
echo '<br/><br/><a
href="resourses/obzor_ocenki_prep.php">просмотр успеваемости</a>';
}($acl->isAllowed($role, 'ocenki_stud')) {
// код для вывода ссылки на ресурс
echo '<br/><br/><a
href="resourses/ocenki_stud.php">просмотр оценок</a>';
}
?>
Листинг скрипта registration.php:
<?php
// Инициализируем начало сессии_start();
// Подключаем файл конфигурации и файл функций
include("config.inc.php");("functions.inc.php");
// Подключаемся к БД
$link = mysql_connect($DBSERVER, $DBUSER, $DBPASS)
or die("Не могу подключиться" );
// Делаем $DB текущей базой данных_select_db($DB, $link) or die ('Не могу
выбрать БД');
if(!$_POST['do'] OR $_POST['do'] =='') {
// Генерируем шестизначный код для capcha(капчи)
//Вывод ФОРМЫ("REGform.html");
}
//Если данные отправлены($_POST['do'] !='') {
//Начинаем проверять входящие данные($_POST['sid'] == $_SESSION['uid']) {
//Создаем запрос к базе для проверки существования Пользователя
$nick= $_POST['nick'];_query("SELECT * FROM users WHERE
nick='".strtolower($nick)."'");
//Проверка результата запроса(mysql_affected_rows()==0) {
//Проверка введенных паролей($_POST['pass'] !='' AND $_POST['rpass'] !='' AND
$_POST['pass'] === $_POST['rpass']){
//Проверяем адрес электронной почты(checkmail($_POST['mail']) !== -1) {
//Осуществляем регистарацию
//Генерируем uniq_id
$uniq_id =
md5($_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT'].mktime());
$pass = $_POST['pass'];
$email = $_POST['mail'];
//Создаем запрос для записи данных в БД
$r = @mysql_query("INSERT INTO users
VALUES(NULL,'".strtolower($nick)."','".md5($pass)."','".$email."','".$uniq_id."',0,'".date("dmY")."','".date("dmY")."')");
//После запроса отправляем письмо пользователю, для активации
аккаунта($r) {
// Для отправки e-mail в виде HTML устанавливаем необходимый mime-тип и
кодировку
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=windows-1251' .
"\r\n";
// Откуда пришло
$headers .= 'From:Сайт %sitename%' . "\r\n";
//Здесь указать e-mail, куда будут уходить сообщения
$mailto = $email;
$subject = "Подтверждение регистарции на веб-портале СпбГУТ";
$message = 'Для активации аккаунта пройдите по следующей ссылке
<a
href="http://www.systemadostupa1.ru/registration.php?='.$uniq_id.'"
target="_blank">http://www.systemadostupa1.ru/registration.php?activation='.$uniq_id.'</a>';
$message .= 'или скопируйте ссылку в окно ввода адреса браузера и нажмите
Enter.';
//Отправляем сообщение(sendmail($mailto,$subject,$message,$headers) !== FALSE) {'Регистрация завершена, на
введеный Вами e-mail было отправлено сообщение для активации аккаунта';
}{echo 'Регистрация невозможна: Повторите запрос позднее';}
}{echo 'Регистрация невозможна: Повторите запрос позднее';}
}{echo 'Регистрация невозможна: Электронный адрес должен соответствовать
шаблону <b>name@domen.com</b><br/><a
href="registration.php"/>назад</a>';}
}{echo 'Регистрация невозможна: Введенные пароли не
совпадают<br/><a
href="registration.php"/>назад</a>';}
}{ echo 'Регистрация невозможна: Пользователь с таким именем уже
существует<br/><a href="registration.php"/>назад</a>';}_destroy();
}{ echo 'Регистрация невозможна: код подтверждения введен не
верно<br/><a href="registration.php"/>назад</a>';}
}
//Активация аккаунта($_GET['activation'] AND $_GET['activation']!='') {
$uniq_id = $_GET['activation'];
//Создаем запрос
$r=@mysql_query("UPDATE users SET status=1 WHERE
uniq_id='".$uniq_id."' AND status=0");($r) {echo '<h2>Ваша учетная запись активирована.</h2><br/> Теперь вы можете <a
href="auth.php">войти на сайт</a> используя данные
указанные при регистрации';}{echo 'Активация невозможна: профиль уже
активирован';}
}
?>
Листинг скрипта output_login.php:
<?php
$q2 = @mysql_query("SELECT * FROM users WHERE
nick='".$_SESSION['user']."' AND
password='".$_SESSION['password']."' AND
status=1");(@mysql_num_rows($q2)==1){
$r2 = @mysql_fetch_array($q2);'Вы: '.ucfirst($r2['nick']).'<br/>';'<a
href="auth.php">главная</a>
';'<br/><a href="auth.php?exit=1">выход</a>';
}
?>
Листинг скрипта output_users.php:
<html>
<head>
<title>output info table USERS</title>
<meta charset=Windows-1251">
</head>
<body>
<?php
// Подключаемся к MySQL("SERVER", "localhost");("USERNAME",
"root");("PASSWORD", "");
$link = mysql_connect (SERVER, USERNAME, PASSWORD);( !$link )
die ("Couldn't connect to MySQL");
//Сделаем REG текущей базой данных
$registr = mysql_select_db('REG', $link);(!$registr)
{("<br><b>База данных не доступна</b> %s",
mysql_error()."<br>");
}
{"<br><b>База данных создана
успешно</b><br>";
}
// Выбираем значения из таблицы users
$query = "SELECT id,nick,password,email,uniq_id,status, last_date,date
FROM users";
//Проверяем наличие информации
$db1_1 = mysql_query($query);
if (!$db1_1)
{("<br><b>Нет данных</b> %s",
mysql_error()."<br><br>");
}
{"<br><b>Данные
найдены</b><br><br>";
}
//Формируем цикл для последовательного вывода данных
$z1 = mysql_num_rows($db1_1);
for ($i = 0; $i < $z1; $i = $i + 1)
{
// Обрабатываем ряд результата запроса и возвращаем ассоциативный массив
$r1 = mysql_fetch_assoc($db1_1);
//Вывод данных"<br>"."<b>Users
#".$i."</b><br><br>";"id:
"."<b>".$r1["id"]."</b>"."<br>";"nick:
"."<b>".$r1["nick"]."</b>"."<br>";"password:
"."<b>".$r1["password"].""."</b>"."<br>";"email
"."<b>".$r1["email"]."</b>"."<br>";"uniq_id
"."<b>".$r1["uniq_id"]."</b>"."<br>";"status
"."<b>".$r1["status"]."</b>"."<br>";"last_date
"."<b>".$r1["last_date"]."</b>"."<br>";"date
"."<b>".$r1["date"]."</b>"."<br>";
}
//Завершаем работу с БД(!mysql_close($link))
{"<br><br><b> Не удалось завершить соединение с
базой данных</b><br>";
}
{"<br><br><b>Соединение с базой данных завершено
успешно</b><br>";
}
?>
</body>
</html>
Листинг скрипта capcha.php:
<?php
//Инициализируем начало сессии_start();
//Создаем изображение из 3-х возможных вариантов фона
$im=ImageCreateFromJpeg(round(mt_rand(1,3)).".jpg");
//Генерируем цвет надписи
$color=ImageColorAllocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
//Формируем надпись, используя шрифт($im, 23, mt_rand(-5,5), 3, 30, $color,
"addict.ttf", $_SESSION['uid']);
//Указываем тип содержимого("Content-type:
image/jpeg");
//Создаем и выводим изображение($im);
//Разрушаем изображение($im);
?>
Листинг формы AUTHform.html
<html>
<head>
<title>Авторизация</title>
</head>
<body>
<a href="registration.php">регистрация</a> <br/><br/>
<form name="1" action=""
method="post">
<input name="login" type="text"
value=""> <br/>
<input name="password" type="password"
value=""> <br/>
<input name="do" type="submit"
value="Войти">
</form>
</body>
</html>
Листинг формы REGform.html
<html>
<head>
<title>Регистрация</title>
</head>
<body>
<form action="" method="POST">
Логин:
<input name="nick" type="text"
value=""><br/>
Пароль:
<input name="pass" type="password"
value=""><br/>
Повторите пароль: <input name="rpass"
type="password" value=""><br/>
Эл.адрес: <input name="mail"
type="text" value="name@domen.com"><br/>
<img
src="img/capcha.php?sid='.$_SESSION['uid'].'"/> <br/>
<input name="sid" type="text"
value=""><br/><br/>
<input name="do" type="submit"
value="зарегистрировать">
</form>
</body>
</html>
Листинг скрипта default.php:
<?php'ШАБЛОН.php';
?>
Листинг скрипта R_auth.php:
<?php
// Инициализируем начало сессии_start();
//Поключаем файл конфигурации("R_config.inc.php");
//Подключаемся к БД
$link = mysql_connect($DBSERVER, $DBUSER, $DBPASS)
or die("Не могу подключиться" );
// сделать $DB текущей базой данных_select_db($DB, $link) or die ('Не
могу выбрать БД');
//Если нет сессий(md5(crypt($_SESSION['user'],$_SESSION['password']))
!= $_SESSION['SID'])
{
//Если кнопка не нажата, отображаем форму(!$_POST['do']){
//Вывод ФОРМЫ авторизации("R_AUTHform.html");
}
//Если кнопка нажата
if($_POST['do']) {
//Проверяем данные
$login = $_POST['login'];
$upass = $_POST['password'];($login !='' AND $upass !='') {
//Создаем запрос
$q1=mysql_query("SELECT * FROM students WHERE
students_nick='".$login."' AND
students_password='".$upass."' ");// добавить AND status=1 если будет проверка документов
$q2=mysql_query("SELECT * FROM teachers WHERE
teachers_nick='".$login."' AND teachers_password='".$upass."'
");// добавить AND status=1 если будет проверка документов
$q3=mysql_query("SELECT * FROM metodist WHERE
metodist_nick='".$login."' AND metodist_password='".$upass."' ");//
добавить AND status=1 если будет проверка документов
//Проверяем существует ли хоть одна запись
if(mysql_num_rows($q1)===1 OR mysql_num_rows($q2)===1 OR
mysql_num_rows($q3)===1) {(mysql_num_rows($q1)===1) {$zzz1=TRUE; echo 'НАЙДЕНА запись в табл студент','<br />';}(mysql_num_rows($q2)===1) {$zzz2=TRUE; echo
'НАЙДЕНА запись
в табл преподаватель','<br
/>';}(mysql_num_rows($q3)===1) {$zzz3=TRUE; echo 'НАЙДЕНА запись в табл методист','<br />';}
//Если есть, то создаем сессии, запускаем скрипт прав доступа и
перенаправляем на страницу
if ($zzz1)
{$r=mysql_fetch_array($q1);
$_SESSION['user'] = $r['students_nick'];
$_SESSION['password'] = $r['students_password'];
$_SESSION['SID'] =
md5(crypt($r['students_nick'],$r['students_password']));
echo 'создана сессия для студента';
}($zzz2)
{$r=mysql_fetch_array($q2);
$_SESSION['user'] = $r['teachers_nick'];
$_SESSION['password'] = $r['teachers_password'];
$_SESSION['SID'] =
md5(crypt($r['teachers_nick'],$r['teachers_password']));
echo 'создана сессия для преп';
}($zzz3)
{$r=mysql_fetch_array($q3);
$_SESSION['user'] = $r['metodist_nick'];
$_SESSION['password'] = $r['metodist_password'];
$_SESSION['SID'] =
md5(crypt($r['metodist_nick'],$r['metodist_password']));
echo 'создана сессия для методиста';
}
//срипт РАСПРЕДЕЛЕНИЯ ПРАВ ДОСТУПА("R_gut_acl.php");
//скрипт для вывода логина авторизованного пользователя+ кнопки
управления
include("R_output_login.php");
// указать страницу личного кабинета
@Header("Location: R_auth.php");
}{echo 'Неверный логин/пароль; Повторите попытку авторизации';}
}{echo 'Введите данные';}
}
}{
//блок для вывода шаблонов страниц портала
//if($_GET['page'] !='') {
// @include("tpl/".$_GET['page'].".php");
// }
//else { @include("tpl/default.php");}
//скрипт для вывода логина авторизованного пользователя+ кнопки
управления
include("R_output_login.php");
}($_GET['exit']) {@session_destroy(); unset($_GET['exit']);
mysql_close($link); @Header("Location: R_auth.php");}
?>
Листинг скрипта R_output_login.php:
<?php
// Блок для вывода логина авторизованного пользователя( ВЫ: логин)
$qx1=mysql_query("SELECT * FROM students WHERE
students_nick='".$login."' AND
students_password='".$upass."' ");// добавить AND status=1 если будет проверка документов
$qx2=mysql_query("SELECT * FROM teachers WHERE
teachers_nick='".$login."' AND
teachers_password='".$upass."' ");// добавить AND status=1 если будет проверка документов
$qx3=mysql_query("SELECT * FROM metodist WHERE
metodist_nick='".$login."' AND metodist_password='".$upass."' ");//
добавить AND status=1 если будет проверка документов
if(mysql_num_rows($qx1)===1 OR mysql_num_rows($qx2)===1 OR
mysql_num_rows($qx3)===1)
{(mysql_num_rows($qx1)===1)
$zzzx1=TRUE;(mysql_num_rows($qx2)===1) $zzzx2=TRUE;(mysql_num_rows($qx3)===1)
$zzzx3=TRUE;($zzz1) {$r2=mysql_fetch_array($qx1); $nick='students_nick';}($zzz2)
{$r2=mysql_fetch_array($qx2); $nick='teachers_nick';}($zzz3)
{$r2=mysql_fetch_array($qx3); $nick='metodist_nick';}'Вы:
'.ucfirst($r2[$nick]).'<br/>';'<a href="R_auth.php">Главная</a>','<br/>';'<br/><a
href="R_auth.php?exit=1">Выход</a>';
}
Листинг скрипта R_gut_acl.php:
<?php
// Путь к файлам с классами Zend'а
set_include_path('library');
// Подключаем необходимые классы_once 'Zend/Acl.php';_once
'Zend/Acl/Role.php';_once 'Zend/Acl/Resource.php';
// Создание списка контроля доступа ACL (объект Zend_Acl)
$acl = new Zend_Acl();
// ДОБАВЛЕНИЕ ПОЛЬЗОВАТЕЛЕЙ(РОЛЕЙ)
// Выполним добавление ГРУПП пользователей
//ГРУППА действующих(реальных) пользователей
$acl->addRole(new Zend_Acl_Role('users_group'))
//Подгруппа учащиеся=group_std
>addRole(new Zend_Acl_Role('group_std'), 'users_group')
//Подгруппа сотрудники=group_sotrud
>addRole(new Zend_Acl_Role('group_sotrud'),'users_group');
//ГРУППА возможных(потенциальных) пользователей
$acl->addRole(new Zend_Acl_Role('pt_users_group'))
//подгруппа потенциальные учащиеся=pt_group_std
->addRole(new Zend_Acl_Role('pt_group_std'),
'pt_users_group')
//подгруппа потенциальные сотрудники=pt_group_sotrud
->addRole(new Zend_Acl_Role('pt_group_sotrud'),
'pt_users_group');
// Добавление пользователей без наследования прав
// пользователь ГОСТЬ
$acl->addRole(new Zend_Acl_Role('guest'))
// АДМИНИСТРАТОР web-портала
>addRole(new Zend_Acl_Role('admin'))
// Добавление ПОДГРУПП пользователей с наследованием прав от 3-х
категорий
//Подгруппы действующих(реальных) пользователей:
//Подгруппа группы сотрудники МЕТОДИСТ=metodist
->addRole(new
Zend_Acl_Role('metodist'),array('guest','users_group', 'group_sotrud' ))
//Подгруппа группы
сотрудники преподаватель=prepodavatel
>addRole(new Zend_Acl_Role('prepodavatel'), array('guest','users_group',
'group_sotrud' ))
//Подгруппа группы сотрудники администрация(административная
должность)=administration
->addRole(new Zend_Acl_Role('administration'),
array('guest','users_group', 'group_sotrud' ))
//Подгруппа группы
учащиеся СТУДЕНТ=student
>addRole(new
Zend_Acl_Role('student'),array('guest','users_group', 'group_std' ))
//Подгруппа группы
учащиеся АСПИРАНТ=aspirant
>addRole(new Zend_Acl_Role('aspirant'),
array('guest','users_group', 'group_std' ))
//Подгруппа группы учащиеся РОДИТЕЛИ=roditeli :-)
->addRole(new Zend_Acl_Role('roditeli'),
array('guest','users_group', 'group_std' ))
//Подгруппы возможных(потенциальных) пользователей (аналогично
предыдущему блоку)
->addRole(new
Zend_Acl_Role('pt_metodist'),array('guest','pt_users_group', 'pt_group_sotrud'
))
>addRole(new Zend_Acl_Role('pt_prepodavatel'),
array('guest','pt_users_group', 'pt_group_sotrud' ))
>addRole(new Zend_Acl_Role('pt_administration'),
array('guest','pt_users_group', 'pt_group_sotrud' ))
>addRole(new Zend_Acl_Role('pt_student'),array('guest','pt_users_group',
'pt_group_std' ))
>addRole(new Zend_Acl_Role('pt_aspirant'),
array('guest','pt_users_group', 'pt_group_std' ))
>addRole(new Zend_Acl_Role('pt_roditeli'),
array('guest','pt_users_group', 'pt_group_std' ));
// ДОБАВЛЕНИЕ РЕСУРСОВ
// defaultModule- МОДУЛЬ ПО УМОЛЧАНИЮ
$acl->add(new Zend_Acl_Resource('defaultModule'));
// UserController (общие функции)
$acl->add(new Zend_Acl_Resource('UserController'),
'defaultModule');
$acl->add(new Zend_Acl_Resource('registerAction'),
'UserController');
$acl->add(new Zend_Acl_Resource('loginAction') ,
'UserController');
$acl->add(new Zend_Acl_Resource('logoutAction') ,
'UserController');
// SiteController (страницы-разделы портала)
$acl->add(new Zend_Acl_Resource('SiteController'),
'defaultModule');
$acl->add(new Zend_Acl_Resource('news') ,
'SiteController');
$acl->add(new Zend_Acl_Resource('about') ,
'SiteController');
$acl->add(new Zend_Acl_Resource('history') ,
'SiteController');
$acl->add(new Zend_Acl_Resource('structure'),
'SiteController');
$acl->add(new Zend_Acl_Resource('documrnts'),
'SiteController');
$acl->add(new Zend_Acl_Resource('education'),
'SiteController');
// UzoneController (личные
кабинеты)
$acl->add(new Zend_Acl_Resource('UzoneController'),
'defaultModule');
$acl->add(new Zend_Acl_Resource('cabinet'),
'UzoneController');
// uchet_uspevModule- МОДУЛЬ
УЧЕТА УСПЕВАЕМОСТИ
$acl->add(new Zend_Acl_Resource('uchet_uspevModule'));
// SpecController (должностные функции)
$acl->add(new Zend_Acl_Resource('SpecController'),
'uchet_uspevModule');
$acl->add(new Zend_Acl_Resource('redakt_ocenki_metodist')
, 'SpecController');
$acl->add(new Zend_Acl_Resource('obzor_ocenki_prep') ,
'SpecController');
$acl->add(new Zend_Acl_Resource('ocenki_stud') ,
'SpecController');
//РАСПРЕДЕЛЕНИЕ РОЛЕЙ
$role='guest';(isset($_SESSION['SID']) )
{
//**подключить БД учета успев (в которой хранятся таблицы
действующих(реальных) пользователей)
$db_uni=mysql_select_db('university8', $link) or die ('Can\'t
use university : ' . mysql_error());(!$db_uni)
{("<br><b>Database УЧЕТ_УСПЕВАЕМОСТИ connection error!</b> %s",
mysql_error()."<br>");
}
{"<br><b>Database university
online</b><br>";
}
$q01 = @mysql_query("SELECT * FROM metodist WHERE
metodist_nick='".$_SESSION['user']."'AND
metodist_password='".$_SESSION['password']."'
");(@mysql_num_rows($q01)==1)
{$role='metodist';echo 'Группа: ',$role, '<br />';}{
$q02 = @mysql_query("SELECT * FROM students WHERE
students_nick='".$_SESSION['user']."' AND
students_password='".$_SESSION['password']."'");(@mysql_num_rows($q02)==1)
{$role='student';echo 'Группа: ',$role, '<br
/>';}{
$q03 = @mysql_query("SELECT * FROM teachers WHERE
teachers_nick='".$_SESSION['user']."' AND
teachers_password='".$_SESSION['password']."'");(@mysql_num_rows($q03)==1)
{$role='prepodavatel';echo'Группа:
', $role, '<br />';}{
$q04 = @mysql_query("SELECT * FROM administration WHERE
administration_nick='".$_SESSION['user']."' AND
administration_password='".$_SESSION['password']."'");(@mysql_num_rows($q04)==1)
{$role='administration';echo'Группа:
', $role, '<br />';}{
$q05 = @mysql_query("SELECT * FROM aspirants WHERE
aspirants_nick='".$_SESSION['user']."' AND
aspirants_password='".$_SESSION['password']."'");(@mysql_num_rows($q05)==1)
{$role='aspirant';echo'Группа: ', $role, '<br
/>';}{
$q06 = @mysql_query("SELECT * FROM roditeli WHERE
roditeli_nick='".$_SESSION['user']."' AND
roditeli_password='".$_SESSION['password']."'");(@mysql_num_rows($q06)==1)
{$role='roditeli';echo'Группа: ', $role, '<br
/>';}
}
}
}
}
}
}
//УСТАНОВКА ПРАВ ДОСТУПА К РЕСУРСАМ
// Разрешаем администратору портала все действия
$acl->allow('admin');
//Права доступа для гостя
// Разрешаем доступ к контроллеру UserController пользователю
guest(гость)
$acl->allow('guest', 'UserController');
// Разрешаем доступ к контроллеру SiteController пользователю
guest(гость)
$acl->allow('guest', 'SiteController');
// Запрещаем доступ к контроллеру UzoneController пользователю
guest(гость)
$acl->deny('guest', 'UzoneController');
// Запрещаем доступ к контроллеру SpecController пользователю
guest(гость)
$acl->deny('guest', 'SpecController');
//Права доступа для подгруппы УЧАЩИЕСЯ
// Разрешаем доступ к контроллеру UserController группе
group_std(учащиеся)
$acl->allow('group_std', 'UserController');
// Разрешаем доступ к контроллеру SiteController группе
group_std(учащиеся)
$acl->allow('group_std', 'SiteController');
// Разрешаем доступ к контроллеру UzoneController группе
group_std(учащиеся)
$acl->allow('group_std', 'UzoneController');
// Запрещаем доступ к контроллеру SpecController группе
group_std(учащиеся)
$acl->deny('group_std', 'SpecController');
//Права доступа для подгруппы СОТРУДНИКИ
// Разрешаем доступ к модулю 'defaultModule' группе
group_sotrud(сотрудники)
$acl->allow('group_sotrud', 'defaultModule');
// Разрешаем доступ к контроллеру UzoneController группе
group_sotrud(сотрудники)
$acl->allow('group_sotrud', 'UzoneController');
// Разрешаем доступ
к ресурсу redakt_ocenki_metodist контроллера SpecController подгруппе metodist
$acl->allow('metodist', 'redakt_ocenki_metodist');
// Разрешаем доступ
к ресурсу obzor_ocenki_prep контроллера SpecController подгруппе prepodavatel
$acl->allow('prepodavatel', 'obzor_ocenki_prep');
// Разрешаем доступ
к ресурсу ocenki_stud контроллера SpecController подгруппе student
$acl->allow('student', 'ocenki_stud');
//ПРОВЕРКА ПРАВ ДОСТУПА'ACCESS CONTROL LIST:','<br
/>';'Access to defaultModule for admin ', $acl->isAllowed('admin',
'defaultModule') ? "allowed" : "denied", '<br />';'Access
to UserController for guest ', $acl->isAllowed('guest', 'UserController' ) ?
"allowed" : "denied", '<br />';'Access to
UzoneController for guest ',$acl->isAllowed('guest', 'UzoneController' ) ?
"allowed" : "denied", '<br />';'Access to
SpecController for group_std ',$acl->isAllowed('group_std','SpecController')
? "allowed" : "denied", '<br />';'Access to
SpecController for group_sotrud ',
$acl->isAllowed('group_sotrud','SpecController') ? "allowed" : "denied",
'<br />';'Access to redakt_ocenki_metodist for metodist ',
$acl->isAllowed('metodist','redakt_ocenki_metodist') ? "allowed" :
"denied", '<br />';'Access to obzor_ocenki_prep for
prepodavatel ', $acl->isAllowed('prepodavatel','obzor_ocenki_prep') ?
"allowed" : "denied", '<br />';'Access to ocenki_stud
for student ', $acl->isAllowed('student','ocenki_stud') ?
"allowed" : "denied", '<br />';
//Вывод ресурсов($acl->isAllowed($role, 'redakt_ocenki_metodist')) {
// код для вывода ссылки на ресурс
echo '<br/><br/><a
href="resourses/redakt_ocenki_metodist.php">редактировать оценки</a><br/><br/>';
}($acl->isAllowed($role, 'obzor_ocenki_prep')) {
// код для вывода ссылки на ресурс
echo '<br/><br/><a
href="resourses/obzor_ocenki_prep.php">просмотр успеваемости</a><br/><br/>';
}($acl->isAllowed($role, 'ocenki_stud')) {
// код для вывода ссылки на ресурс
echo '<br/><br/><a
href="resourses/ocenki_stud.php">просмотр оценок</a><br/><br/>';
}
?>
В этой главе были представлены основные фрагменты кода системы. Приводить
тут полный код программы не представляется возможным, из-за его огромного
объема.
Полный код приложения можно посмотреть на прилагаемом диске.
Похожие работы на - Разработка системы доступа к ресурсам образовательного веб-портала вуза
|