Сервис Membership, доступный через класс System.Web.Security.Membership, позволяет определить различные виды членства на сайте. Информацию о членах можно хранить в различных местах – в базах данных, текстовых файлах или даже в учетных записях Windows. Данная ситема использует в качестве хранилища базу данных. Конфигурировать членство можно индивидуально для каждого пользователя или на основе ролей с помощью сервиса Role Manager. Роли облегчают конфигурирование, так как можно создавать роли и потом добавлять пользователей к готовым ролям. На рисунке 4.2 представлена схема провайдера данной системы.
После определения идентификация пользователя, выдавшего запрос, принимаются решения, связанные с управлением доступом. В ASP.NET два встроенных механизма авторизации, управляющих доступом на уровне URL: File и URL.
В данной работе используется URL авторизация. При авторизации URL действуют правила управления доступом, задаваемые в конфигурационном файле, которые разрешают или запрещают доступ в зависимости от имени пользователя или ролей.
Рисунок 4.2 – Схема Membership провайдера
Правила управления доступом для авторизации URL задаются на уровне URL в конфигурационном разделе (рисунко 4.3).
Рисунок 4.3 – Схема авторизации
Важным моментом в обеспечении защиты web-приложения является отсутствие файлов, которые не планируется передавать клиентам. В описываемой системе такие файлы были удалены из физической структуры каталогов, начиная с самого верхнего каталога, помеченного в конфигурации IIS как Web-приложение (виртуальный каталог). Так как если файл не принадлежит Web-пространству имен, он не будет доступен при запросах к этому пространству. Так же отслеживаются файлы загружаемые в систему.
Следующая настройка (рисунок 4.4) файла Web.config запрещает загружать в систему клиентам данного приложения файлы с размером больше, чем указано.
Рисунок 4.4 – Элемент файла Web.config
ВЫВОДЫ
Анализ представленных на рынке систем автоматизированного поиска позволяет отметить общую тенденцию в подходе к разработке таких систем: в рамках разрабатываемых средств они стремятся охватить все элементы традиционного поиска.
Основными недостатками существующих систем являются недостаточная их локализация. То есть они являются общими системами и не учитывают потребности конкретных процессов.
Эти проблемы может решить разработанная система, которая автоматизирует процесс поиска банкоматов и отделений банков с целью эффективного взаимодействия между пользователями банковских услуг и банками. Внедрение системы в автоматизированный поиск банкоматов отделений позволит:
- Поиск банкоматов с отображением их на карте с учётом вашего текущего местоположения. Ваше текущее местоположение с помощью HTML5 Geolocation. Если Ваш браузер этого не поддерживает или Ваше местоположение не удалось точно определить, достаточно кликнуть на карте, что бы указать, где Вы находитесь и начать поиск;
- Поиск магазинов, где Вы можете расплатиться с помощью банковских карт;
- Поиск кафе, баров, ресторанов, где вы можете провести время, расплатившись без использования наличных средств;
- Информация и статьи о банковских картах, их особенностях и способах оплаты.
Возможность удобного поиска с затратой минимальных усилий, быстрое нахождение банкоматов и отделений банков в любом уголке Украины,– все это делает систему автоматизированного поиска банкоматов не опциональным дополнением, а продиктованной современными условиями необходимостью.
ПЕРЕЧЕНЬ ССЫЛОК
1. Zoho – Online Office, Word Processor, Spreadsheet, Presentation, CRM Электронный ресурс – Режим доступа: http://zoho.com/ – 16.02.2008 г. – Загл. с экрана.
2. Moodle – A Free, Open Source Course Management System for Online Learning Электронный ресурс – Режим доступа: http://moodle.org/ – 10.03.2008 г. – Загл. с экрана.
3. WebCT Communities Электронный ресурс – Режим доступа: http://www.webct.com/webct/ – 10.02.2008 г. – Загл. с экрана.
4. Группы Google Электронный ресурс – Режим доступа: http://groups.google.com.ua/ – 26.04.2008 г. – Загл. с экрана.
5. IBM Lotus Software Электронный ресурс – Режим доступа: http://www-306.ibm.com/software/lotus/ – 26.02.2008 г. – Загл. с экрана.
6. Рихтер Дж. Программирование на платформе Microsoft .NET Framework. Мастер–класс Дж. Рихтер: пер. с англ. – СПб.: Питер, 2005. – 512 с.
7. ASP.NET (.NET Framework) Электронный ресурс – Режим доступа: http://msdn.microsoft.com/en-us/library/bb400852.aspx – 10.05.2008 г. – Загл. с экрана.
8. Троелсен Э. Язык программирования C# 2005 и платформа .NET 2.0. HTML Э. Троелсен: – М.; ООО «И.Д. Вильямс», 2007. – 1168 с.
9. Сеппа Д. Программирование на Microsoft ADO.NET 2.0. Мастер класс Д. Сеппа: пер. с англ. – М.: Издательский дом «Русская редакция»; СПб.: Питер, 2007. – 784 с.
10. Мак-Дональд М. Microsoft ASP.NET с примерами на C# 2005 для профессионалов М. Мак-Дональд: пер. с англ. – М.; ООО «И.Д. Вильямс», 2006. – 1408 с.
11. Буч Г., Якобсон А. UML Г.Буч. - СПб.:Питер, 2005.-736 с.
12. Integration Definition Metodology – Режим доступа: http://www.idef.ru/ – 12.12.2007 г. – Загл. с экрана.
13. Дейт К. Введение в системы базы данных, 8–е издание К. Дейт: пер. с англ. – М.: Издательский дом «Вильямс», 2005. – 1328 с.
14. Хэндерсон К. Профессиональное руководство по SQL Server: хранимые процедуры, XML, HTML К. Хэндерсон. – СПб.:Питер, 2005. – 620 с.
Приложение А
Программный код приложения
/// <summary>
/// Represent course information.
/// </summary>
public class Course
{
...
}
/// <summary>
/// The class CourseManagement represents methods that makes possible do
/// actions with course information.
/// </summary>
public class CourseManagement
{
/// <summary>
/// Gets all courses that are available for study.
/// </summary>
/// <returns>The collection of courses.</returns>
[DataObjectMethod(DataObjectMethodType.Select)]
public IList<Course> SelectCourses()
{
List<Course> courseList = new List<Course>();
SqlConnection connection = new SqlConnection(_connectionString);
using (SqlCommand command = new SqlCommand(Procedure.SelectAllCourse, connection))
{
command.CommandType = CommandType.StoredProcedure;
connection.Open();
SqlDataReader sqlDataReader = command.ExecuteReader();
while (sqlDataReader.Read())
{
Course course = new Course(sqlDataReader.GetGuid(0), HttpUtility.HtmlDecode(sqlDataReader.GetString(1)), HttpUtility.HtmlDecode(sqlDataReader.GetString(7)), sqlDataReader.GetGuid(8), sqlDataReader.GetDateTime(3), sqlDataReader.GetDateTime(4), sqlDataReader.GetBoolean(5), sqlDataReader.GetInt32(6), sqlDataReader.GetInt32(11), HttpUtility.HtmlDecode(sqlDataReader.GetString(2)), HttpUtility.HtmlDecode(sqlDataReader.GetString(9)), HttpUtility.HtmlDecode(sqlDataReader.GetString(10)));
courseList.Add(course);
}
connection.Close();
}
return courseList;
}
/// <summary>
/// Gets subjects of the specified course.
/// </summary>
/// <param name="courseId">Course identifier</param>
/// <returns>The collection of courses.</returns>
public List<string> GetCourseSubjects(Guid courseId)
{
List<string> subjects = new List<string>();
using (SqlConnection connection = new SqlConnection(_connectionString))
{
using (SqlCommand cmd = new SqlCommand(Procedure.SelectCurriculumCourseContent, connection))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter(ParameterName.CourseId, SqlDbType.UniqueIdentifier));
cmd.Parameters[ParameterName.CourseId].Value = courseId;
connection.Open();
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
subjects.Add(reader.GetString(2));
}
connection.Close();
}
}
return subjects;
}
/// <summary>
/// Insert course to database.
/// </summary>
/// <param name="course">Course data.</param>
/// <returns>Inserted course identifier.</returns>
[DataObjectMethod(DataObjectMethodType.Insert)]
public Guid InsertCourse(Course course)
{
SqlConnection connection = new SqlConnection(_connectionString);
Guid courseId = new Guid();
using (SqlCommand command = new SqlCommand(Procedure.InsertCourse, connection))
{
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(TitleParameter, SqlDbType.NVarChar).Value = course.Title;
command.Parameters.Add(CourseKeyParameter, SqlDbType.NVarChar).Value = course.CourseKey;
command.Parameters.Add(DescriptionParameter, SqlDbType.NVarChar).Value = course.Description;
command.Parameters.Add(StartDateParameter, SqlDbType.DateTime).Value = course.StartDate;
command.Parameters.AddWithValue(EndDateParameter, SqlDbType.DateTime).Value = course.EndDate;
command.Parameters.Add(IsMasterParameter, SqlDbType.Bit).Value = course.IsMaster;
command.Parameters.Add(AmountCreditsParameter, SqlDbType.Float).Value = course.AmountCredits;
command.Parameters.Add(MainTeacherIdParameter, SqlDbType.UniqueIdentifier).Value = course.MainTeacherId;
command.Parameters.Add(ReadingParameter, SqlDbType.NVarChar).Value = course.Reading;
command.Parameters.Add(AssessmentMethodParameter, SqlDbType.NVarChar).Value = course.AssessmentMethod;
command.Parameters.Add(CountStudentInTeamParameter, SqlDbType.Int).Value = course.CountStudentInTeam;
connection.Open();
courseId = new Guid(command.ExecuteScalar().ToString());
connection.Close();
}
return courseId;
}