Конструктор научных сайтов

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    1,23 Мб
  • Опубликовано:
    2012-08-18
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Конструктор научных сайтов

СОДЕРЖАНИЕ

РЕФЕРАТ

ВВЕДЕНИЕ

1. ПОСТАНОВКА ЗАДАЧИ

1.1 Требования к сайту научной группы

2. ОБЗОР СУЩЕСТВУЮЩИХ ПРОГРАММНЫХ СРЕДСТВ

3. ОБОСНОВАНИЕ ПРОГРАММНЫХ СРЕДСТВ ДЛЯ РЕАЛИЗАЦИИ КОНСТРУКТОРА САЙТОВ НАУЧНЫХ ГРУПП

3.1 Язык программирования C#

3.2 Технология ASP.NET

3.2 Система управления реляционными базами данных Microsoft SQL Server

3.3 Набор серверов для служб Интернета - Internet Information Services

4. ИНСТРУКЦИЯ ПРОГРАММИСТА

4.1 Подсистема безопасности

4.2 База данных

5. ИНСТРУКЦИЯ ПОЛЬЗОВАТЕЛЯ

6. ИНСТРУКЦИЯ АДМИНИСТРАТОРА

ЗАКЛЮЧЕНИЕ

БИБЛИОГРАФИЧЕСКИЙ СПИСОК

ПРИЛОЖЕНИЕ. Текст программы

РЕФЕРАТ


УДК 004.42

Олифер П.А. Конструктор научных сайтов.

Кл. сл: КОНСТРУКТОР САЙТОВ, ПОДСИСТЕМА БЕЗОПАСНОСТИ, ИЕРАРХИЧЕСКАЯ СТРУКТУРА, ASP.NET.

Разработано веб-приложение, позволяющее создавать сайты для нужд научных групп. Оно позволяет задавать иерархию, отображающую административную иерархию учреждения, назначать права пользователям, равномерно распределять нагрузку по обслуживанию сайта между членами научной группы. Веб-приложение обеспечивает многоуровневую гибкую систему администрирования и разграничения прав доступа к объектам в системе.

 

ВВЕДЕНИЕ


В настоящее время существуют десятки различных программных конструкторов сайтов (Content Management System, CMS) как платных, так и распространяемых бесплатно. Задача подобных систем - позволить тем, кто не владеет веб-программированием, создавать высококачественные сайты под конкретные запросы посредством визуального конструирования с минимальными содержательными описаниями. Однако, как правило, на практике получается так, что при создании того или иного CMS авторы руководствуются какой-то конкретной информационной областью, конкретным дизайном сайта и конкретным набором сервисов. В итоге применение имеющегося CMS к созданию сайта, направленность которого не совпадает с той, которую задумывали авторы этого конструктора, затруднено или вообще невозможно.

Одной из проблемных областей IT является создание научных сайтов и порталов. Наука не является чересчур денежной областью, поэтому разработка подобных сайтов не представляет интереса для коммерческих фирм. Инициатива же «снизу», идущая от самих научных работников, натыкается на их непрофессионализм и дает в итоге сайты, которые неудобны как для просмотра, так и для поддержки.

Поэтому весьма важным является разработка собственного CMS, поддерживающего основные информационные требования научной рабочей группы и являющегося, с одной стороны, информативным, а с другой - простым и удобным для наполнения. Данная работа посвящена проработке идеологии подобного CMS и программной реализации некоторого подмножества его функционала.

 

1. ПОСТАНОВКА ЗАДАЧИ


В задачу включается проработка идеологии собственного CMS, поддерживающего основные информационные требования научной рабочей группы и являющегося одновременно информативным, простым и удобным для наполнения, а также программная реализации некоторого подмножества его функционала.

Проектирование сайта включает в себя:

·   создание структурно-содержательной схемы сайта;

·        разработку подсистемы безопасности, соответствующей структурно-содержательной схеме;

·        проектирование базы данных, поддерживающей сайт.

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

1.1 Требования к сайту научной группы


Самой важной из всех подсистем сайта научной группы является подсистема безопасности. Именно подсистема безопасности задает основные требования к сайту научной группы:

1.   иерархическая структура сайта, позволяющая отображать административную иерархию учреждения;

2.       иерархическая структура данных, позволяющая гибко разграничивать права доступа для разных пользователей;

.        возможность многоуровнего администрирования, позволяющая уменьшить нагрузку по обслуживанию сайта на конкретного человека и распределить её равномерно между всеми членами коллектива;

.        удобная для программиста реализация, позволяющая в дальнейшем развивать и модернизировать систему.

Также сайты научных групп имеют свою определенную специфику:

·    наличие нестандартных сервисов, таких как оповеститель о предстоящих конференциях;

·        наличие системы обмена сообщениями, между сотрудниками различных структурных единиц;

·        большое количество перекрестных ссылок, позволяющих ориентироваться в большом количестве различных научных трудов.

 

2. ОБЗОР СУЩЕСТВУЮЩИХ ПРОГРАММНЫХ СРЕДСТВ


Существует множество готовых решений CMS как коммерческих, так и распространяемых бесплатно. Стоит отметить, если заказчик имеет достаточную сумму денег, то он, конечно, может заказать определенный конструктор под свои личные требования, но это очень дорогостоящий вариант. Однако, как уже было отмечено, наука не является слишком денежной областью, поэтому подробнее рассмотрим конструкторы сайтов, распространяемые бесплатно. В табл. 2.1 приведена сравнительная характеристика самых популярных из существующих распространяемых бесплатно конструкторов сайтов.

Таблица 2.1

Сравнительная характеристика бесплатных CMS


Drupal

Joomla!

MODx CMS / CMF

TYPO3

Интерфейс администрирования

Web

Web

Web

Web

База данных

MySQL, Postgres SQL

MySQL

MySQL

MySQL, MS SQL, Oracle, Postgres SQL

Веб-сервер

Apache

Apache, IIS

Apache, IIS

Apache, IIS

Языки программирования

PHP

PHP

PHP

PHP

Ведение лога

Есть

Есть

Нет

Есть

Многоуровневое утверждение изменений

Нет

Есть

Нет

Нет

Разграничение доступа

Есть

Есть

Есть

Есть

Иерархическая структура и гибкая система управления объектами

Нет

Нет

Нет

Нет

Гарантийное обслуживание

Нет

Нет

Нет

Нет

Восстановление удаленных объектов (Корзина)

Нет

Есть

Есть

Есть


Результаты анализа существующих продуктов показывают, что на данный момент ни один из конструкторов не имеет многоуровневой иерархической структуры и гибкой системы управления объектами, на которых могла бы основываться достаточно мощная и гибкая подсистема безопасности.

В конструкторе сайтов Drupal также не существует возможности восстановления данных и многоуровневого утверждения изменений. Последнее приводит к тому, что за администрирование всего сайта должен в этой системе должен отвечать один человек и нет возможно равномерно распределить нагрузку по поддержке сайта между пользователями.

Joomla! - одна из наиболее проработанных систем для создания сайтов на сегодня, но в ней нет поддержки децентрализованного администрирования также как отсутствует достаточно гибкая иерархическая структура, позволяющая тонко наставить права доступа пользователей к объектам в системе.

Конструкторы MODx CMS / CMF и TYPO3 имеют слабую систему модерации данных и не дают возможности тонко настраивать права доступа пользователей к объектам в системе.

Таким образом, самым слабым место самых популярных на сегодня конструкторов сайтов является подсистема безопасности. Также ни один из разработчиков не предоставляет гарантийного обслуживания своих систем. Именно поэтому принято решение разрабатывать собственный конструктор научных сайтов, который обеспечит необходимые требования к подсистеме безопасности.

 

3. ОБОСНОВАНИЕ ПРОГРАММНЫХ СРЕДСТВ ДЛЯ РЕАЛИЗАЦИИ КОНСТРУКТОРА САЙТОВ НАУЧНЫХ ГРУПП


При разработке конструктора научных сайтов было проведено исследование и сравнение программных средств разработки веб-приложений, представленных в настоящее время на рынке. В наши дни набирают популярность системы, позволяющие разделить программный код и код разметки страницы. Таким образом, программисту не нужно заботится о дизайне разрабатываемого продукта, и он может все свое внимание сосредоточить исключительно на программной реализации.

Самые популярные из вышеописанных технологий, имеющих применение в наши дни - Ruby on Rails, Django и ASP.NET.on Rails - программный каркас, написанный на языке программирования Ruby. Ruby on Rails предоставляет архитектурный образец Model-View-Controller(модель-представление-контроллер) для веб-приложений, а также обеспечивает их интеграцию с веб-сервером и сервером базы данных. Django - свободный фреймворк для веб-приложений на языке Python, во многом схож по своей архитектуре и идеологии с Ruby on Rails, поэтому для глубокого изучения была выбрана одна из этих технологий - Django. Неоспоримым плюсом Django и Ruby on Rails является их кроссплатформенность, то есть веб-приложения созданные с использование этих технологий могут быть размещены на серверы под управление операционных систем как семейства Windows так и семейства Unix. Языки программирования, на которых основаны данные технологии - Ruby и Python являются интерпретируемыми, что на практике составляет достаточно большую сложность при разработке приложений.

Но основной проблемой, при попытке реализовать разработанный продукт с использованием технологии Django стала невозможность адекватно конфигурировать удаленный сервер. Также, на практике оказалось, что существует мало хостингов, поддерживающих данную технологию, и практически все из них имеют уязвимости, позволяющие перехватить управление веб-приложением.

После пробной попытки реализовать разработанную концепцию с использованием технологии Django был сделан вывод о том, что она достаточно перспективна, однако является еще недоработанной. На данный момент существует версия 1.2 данной технологии от 17 мая 2010 года, а сама технология появилось лишь несколько лет назад.

Учитывая все вышеперечисленные проблемы, было принято решение сменить технологию разработки на ASP.NET. Технология ASP.NET базируется на языке программирования C# - объектно-ориентированном, компилируемом языке программирования. Существенным плюсом в данном случае является возможность отладки программы по шагам, что позволяет разработчику быстрее находить ошибки в коде и устранять неисправности. Технология ASP.NET предоставляет множество возможностей для создания веб-приложений, она находится на рынке уже достаточно давно и её нельзя назвать сырой или недоработанной. Практическое применение показало, что на данный момент ASP.NET по своим возможностям во много раз превосходит Django. Единственный минус данного решение - привязка веб-приложения к серверам под управлением операционных систем семейства Windows. Однако в наше время существует множество фирм, предлагающих хостинг, поддерживающий технологию ASP.NET, поэтому проблему привязки сайта к определенной операционной системе можно считать незначительной.

Рассмотрим используемые технологии более подробно.

3.1 Язык программирования C#

# - объектно-ориентированный язык программирования. Разработан в 1998-2001 годах группой инженеров под руководством Андерса Хейлсберга в компании Microsoft как основной язык разработки приложений для платформы Microsoft .NET. Компилятор с C# входит в стандартную установку самой .NET, поэтому программы на нём можно создавать и компилировать даже без инструментальных средств, вроде Visual Studio.# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java. Язык имеет статическую типизацию, поддерживает полиморфизм, перегрузку операторов (в том числе операторов явного и неявного приведения типа), делегаты, атрибуты, события, свойства, обобщённые типы и методы, итераторы, анонимные функции с поддержкой замыканий, LINQ, исключения, комментарии в формате XML.

Переняв многое от своих предшественников - языков C++, Java, Delphi, Модула и Smalltalk - С#, опираясь на практику их использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем: так, C# не поддерживает множественное наследование классов (в отличие от C++).

Возможности языка C#.

·   Частичные типы (разделение реализации класса более чем на один файл).

·        Обобщённые, или параметризованные типы (generics). В отличие от шаблонов C++, они поддерживают некоторые дополнительные возможности и работают на уровне виртуальной машины. Вместе с тем, параметрами обобщённого типа не могут быть выражения, они не могут быть полностью или частично специализированы, не поддерживают шаблонных параметров по умолчанию, от шаблонного параметра нельзя наследоваться.

·        Есть возмлжность создавать сопрограммы с помощью ключевого слова yield, подобно Python и Ruby.

·        Анонимные методы, обеспечивающие функциональность замыкания.

·        Обнуляемые ('nullable') типы-значения, представляющие собой те же самые типы-значения, только могущие принимать также значение null. Такие типы позволяют улучшить взаимодействие с базами данных через язык SQL.

·        Возможность создавать хранимые процедуры, триггеры и даже типы данных на .Net языках (в том числе и на C#).

·        Поддержка 64-разрядных вычислений, что кроме всего прочего, позволяет увеличить адресное пространство и использовать 64-разрядные примитивные типы данных.

·   Возможность использовать ключевые слова select, from, where, позволяющие делать запросы из SQL, XML, коллекций и т.п.(запрос, интегрированный в язык, Language Integrated Query, или LINQ).

·        Инициализация объекта вместе с его свойствами.

·        Деревья выражений: лямбда-выражения могут представляться в виде структуры данных, доступной для обхода во время выполнения, тем самым позволяя транслировать строго типизированные C#-выражения в другие домены (например, выражения SQL).

·        Безымянный тип - var.

·        Методы-расширения - добавление метода в существующий класс с помощью ключевого слова this при первом параметре статической функции.

·        Автоматические свойства: компилятор сгенерирует закрытое (private) поле и соответствующие аксессор и мутатор для кода вида public string Name { get; private set; }

·   Возможность использования позднего связывания, для использования:

o  с языками с динамической типизацией (Python, Ruby)

o   с COM-объектами

o   отражения (reflection)

o   объектов с изменяемой структурой (DOM). Появляется ключевое слово dynamic.

·   Именованные и опциональные параметры

Очевидно, что язык C# является очень мощным программным средством, которое постоянно развивается и модернизируется.

3.2 Технология ASP.NET


ASP.NET - технология создания веб-приложений и веб-сервисов от компании Майкрософт. Она является составной частью платформы Microsoft .NET и развитием более старой технологии Microsoft ASP. На данный момент последней версией этой технологии является ASP.NET 4.0, которая и была применена при разработке конструктора сайтов.

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

Хотя ASP.NET берёт своё название от старой технологии Microsoft ASP, она значительно от неё отличается. Microsoft полностью перестроила ASP.NET, основываясь на Common Language Runtime (CLR), который является основой всех приложений Microsoft .NET. Разработчики могут писать код для ASP.NET, используя практически любые языки программирования, в том числе, и входящие в комплект .NET Framework (C#, Visual Basic.NET, и JScript .NET). ASP.NET имеет преимущество в скорости по сравнению со скриптовыми технологиями, так как при первом обращении код компилируется и помещается в специальный кэш, и впоследствии только исполняется, не требуя затрат времени на парсинг, оптимизацию.

Преимущества ASP.NET.

·   Компилируемый код выполняется быстро, большинство ошибок отлавливается ещё на стадии разработки.

·        Продвинутая обработка ошибок времени выполнения, с использованием блоков try..catch.

·        Пользовательские элементы управления (controls) позволяют выделять часто используемые шаблоны, такие как меню сайта.

·        Использование метафор, уже применяющихся в Windows-приложениях, например, таких как элементы управления и события.

·        Расширяемый набор элементов управления и библиотек классов позволяет быстрее разрабатывать приложения.

·        ASP.NET опирается на многоязыковые возможности .NET, что позволяет писать код страниц на VB.NET, Delphi.NET, Visual C#, J#.

·        Возможность кэширования всей страницы или её части для увеличения производительности

·        Возможность кэширования данных, используемых на странице.

·        Возможность разделения визуальной части и бизнес-логики по разным файлам («code behind»).

·        Расширяемая модель обработки запросов.

·        Расширенная событийная модель.

·        Расширяемая модель серверных элементов управления.

·        Наличие master-страниц для задания шаблонов оформления страниц.

·        Встроенная поддержка AJAX

3.3 Система управления реляционными базами данных Microsoft SQL Server


Так как для программной реализации были выбраны язык программирования C# и технология ASP.NET, разработанные фирмой Microsoft, было принято решение использовать систему управления реляционными базами данных Microsoft SQL Server того же разработчика.SQL Server - система управления реляционными базами данных (СУБД), разработанная корпорацией Microsoft. Основной используемый язык запросов - Transact-SQL, создан совместно Microsoft и Sybase. Transact-SQL является реализацией стандарта ANSI/ISO по структурированному языку запросов (SQL) с расширениями. Используется для работы с базами данных размером от персональных до крупных баз данных масштаба предприятия; конкурирует с другими СУБД в этом сегменте рынка.SQL Server в качестве языка запросов использует версию SQL, получившую название Transact-SQL (сокращённо T-SQL), являющуюся реализацией SQL-92 (стандарт ISO для SQL) с множественными расширениями. T-SQL позволяет использовать дополнительный синтаксис для хранимых процедур и обеспечивает поддержку транзакций (взаимодействие базы данных с управляющим приложением). Microsoft SQL Server и Sybase ASE для взаимодействия с сетью используют протокол уровня приложения под названием Tabular Data Stream (TDS, протокол передачи табличных данных). Протокол TDS также был реализован в проекте FreeTDS с целью обеспечить различным приложениям возможность взаимодействия с базами данных Microsoft SQL Server и Sybase.Server поддерживает зеркалирование и кластеризацию баз данных. Кластер сервера SQL - это совокупность одинаково конфигурированных серверов; такая схема помогает распределить рабочую нагрузку между несколькими серверами. Все сервера имеют одно виртуальное имя, и данные распределяются по IP-адресам машин кластера в течение рабочего цикла. Также в случае отказа или сбоя на одном из серверов кластера доступен автоматический перенос нагрузки на другой сервер.

Начиная с SQL Server 2005 встроена поддержка .NET Framework. Благодаря этому, хранимые процедуры БД могут быть написаны на любом языке платформы .NET, используя полный набор библиотек, доступных для .NET Framework, включая Common Type System (система обращения с типами данных в Microsoft .NET Framework). Однако, в отличие от других процессов, .NET Framework, будучи базисной системой для SQL Server 2005, выделяет дополнительную память и выстраивает средства управления SQL Server вместо того, чтобы использовать встроенные средства Windows. Это повышает производительность в сравнении с общими алгоритмами Windows, так как алгоритмы распределения ресурсов специально настроены для использования в структурах SQL Server.

Для создания базы данных конструктора сайтов использовалась версия последняя версия SQL Server - SQL Server 2008 R2. Была выпущена 21 апреля 2010 года.Server 2008 направлен на то, чтобы сделать управление данными самонастраивающимся, самоорганизующимся и самообслуживающимся механизмом - для реализации этих возможностей были созданы технологии SQL Server Always On. Это позволит уменьшить до нуля время нахождения сервера в нерабочем состоянии.

В SQL Server 2008 была добавлена поддержка структурированных и частичноструктурированных данных, включая цифровые форматы для изображений, звуков, видео и других типов мультимедиа. Поддержка мультимедиа форматов внутри СУБД позволила специализированным функциям взаимодействовать с этими типами данных.

Для повышения эффективности администрирования в SQL Server были включены библиотеки Declarative Management Framework, позволяющие распределять полномочия для баз данных или отдельных таблиц. Были улучшены методы компрессии данных.

3.3 Набор серверов для служб Интернета - Internet Information Services


В качестве сервера, на котором будет размещаться веб-приложение выбран продукт компании Microsoft - Internet Information Services 7.5.(Internet Information Services, до версии 5.1 - Internet Information Server) - набор серверов для нескольких служб Интернета от компании Майкрософт. IIS распространяется с операционными системами семейства Windows NT.

Основным компонентом IIS является веб-сервер, который позволяет размещать в Интернете сайты. IIS поддерживает протоколы HTTP, HTTPS, FTP, POP3, SMTP, NNTP. По данным компании Netcraft на май 2010 года, более 52 млн сайтов обслуживаются веб-сервером IIS, что составляет 25 % от общего числа веб-сайтов.

Основным компонентом IIS является веб-сервер - служба WWW, которая предоставляет клиентам доступ к сайтам по протоколам HTTP и, если настроено, HTTPS.

Один сервер IIS может обслуживать несколько.

Также один сервер с одним IP-адресом может обслуживать на одном TCP-порту несколько сайтов.

В IIS 7.5, существует режимом изоляции рабочих процессов (англ. worker process isolation mode). В этом режиме все веб-приложения, обслуживаемые сервером, работают в разных процессах, что повышает стабильность и безопасность системы.

Веб-сервер IIS предоставляет несколько способов разграничения доступа к сайтам и веб-приложениям. Служба WWW в составе IIS отличается от других веб-серверов тем, что функции обеспечения безопасности в ней тесно интегрированы с системой Windows NT, на основе которой она работает.

Служба WWW поддерживает три основных метода аутентификации, то есть определения личности пользователя по имени и паролю:

·   Базовая аутентификация (basic authentication) - имя и пароль передаются по сети открытым текстом.

·        Сжатая аутентификация (digest authentication) - пароль обрабатывается хеш-функцией перед отправкой по сети, что делает невозможным его прочтение в случае перехвата злоумышленником.

·        Встроенная аутентификация Windows (integrated Windows authentication) - выполняется попытка входа на сервер с теми же учётными данными, под которыми работает браузер пользователя.

Веб-сервер IIS поддерживает несколько различных технологий создания веб-приложений:

ASP.NET - разработанная Microsoft технология; для IIS это - основное на сегодняшний день средство создания веб-приложений и веб-служб. IIS 6.0 поставляется вместе с операционными системами, в которые также изначально входит .NET Framework, так что поддержка ASP.NET как будто уже встроена в IIS 6.0; для более ранних версий необходимо отдельно загрузить и установить .NET Framework;

- ASP;

CGI;

FastCGI;

ISAPI;

SSI.

При помощи CGI приложения для IIS могут разрабатываться на основе практически любых, в том числе сторонних, инструментов, допускающих запись в стандартный поток вывода и чтение переменных среды - Perl, C/С++ и даже средствами интерпретатора командной строки Cmd.exe.

Технология ISAPI позволяет, с одной стороны, создавать специальные приложения для IIS, требующие особенно тесного взаимодействия с механизмом сервера, а с другой стороны является удобной платформой для организации эффективного взаимодействия IIS с другими технологиями разработки веб-приложений - например, PHP и Perl.

Однако во время разработки приложения, разумно пользоваться сервером, встроенным в Microsoft Visual Studio 2010. Это значительно ускоряет процесс разработки, позволяет быстрее реагировать на ошибки, и вносить изменения.

 

4. ИНСТРУКЦИЯ ПРОГРАММИСТА

 

.1 Подсистема безопасности


Рассмотрим подробнее разработанную подсистему безопасности.

Согласно требованиям, подсистема безопасности сайта научной группы должна основываться на иерархической структуре, отображающей административную иерархию учреждения. Структура сайта научной группы приведена на рис. 4.1.

Рис. 4.1. Структурная схема сайта научной группы

На структурной схеме каждый узел графа - это отдельно структурное подразделение научной группы. Структурные подразделения можно разбить на уровни, в зависимости от их местоположения в иерархии сайта.

В каждом структурном подразделении состоят сотрудник, в дальнейшем будем называть их - персоны. На рис. 4.1 персоны обозначены квадратами. Будем говорить, что персоны «привязаны» к структурным подразделениям. Объектами будем называть любые данные, находящиеся в системе. На рис. 4.1 объекты обозначены пятиугольниками. Так у каждого объекта должен быть владелец - некая персона. На рис. 4.1 владельцем объекта «O1» является персона «P1». Несколько объектов могут иметь одного владельца, в таком случае будет существовать несколько связей между одной персоной и разными объектами.

Основной единицей подсистемы безопасности является - группа. Всякие объект и персона имеют «свою» группу. Так, в системе при создании нового пользователя создается одноименная, связанная с ним группа - группа пользователя. Аналогичные операции происходят при создании каждого нового объекта в системе - создаются группы объектов.

Каждая структурная единица сайта также представляется группой в подсистеме безопасности. Назовем их группами иерархии. Сайт является деревом групп иерархии. Связи групп иерархии в этом дереве являются односторонними «ребенок ® родитель».

Всякая группа иерархии имеет связанную с ней группу с суффиксом _admin в имени. Эта группа создается автоматически при создании группы иерархии. В именах остальных групп этот суффикс запрещен. Персоны, привязанные к группе A_admin, имеют полные права доступа на все объекты, привязанные в группе A и к группам из поддерева группы A. Персоны, привязанные к группам с суффиксами _admin, являются администраторами.

Такое представление позволяет все связи свести к связям «группа - группа». Например, привязка персоны к той или иной группе иерархии отмечается связью «группа персоны - группа иерархии». Эта привязка и осуществляет связь между персонами и структурными подразделениями, в которых они состоят. Для определения владельца объекта, следует создать связь «группа объекта - группа персоны». Так же каждый объект должен быть привязан к определенной структурной единице, то есть должна существовать связь «группа объекта - группа иерархии». Это связь позволяет гибко настраивать права доступа на объект для абсолютно разных персон как зарегистрированных в системе, так и незарегистрированных в ней. По умолчанию, при создании объекта, он привязывается к той же группе иерархии, к которой привязана персона - владелец объекта.

Чтобы быть отображенным, каждый объект должен быть привязан хотя бы к одной группе иерархии, как это изображено на рис 4.1. Группы иерархии, в которых состоит объект, будем называть точками привязки объекта. В связях, отвечающих за привязку объекта, то есть связях «группа объекта - группа иерархии», отмечаются права доступа на этот объект в рамках этой группы. У владельцев объекта и у администраторов группы иерархии, а также у администраторов групп всей цепочки родительских групп данной группы, имеются полные права доступа на данных объект. Права на запись автоматически дают право на удаление объекта.

Для каждой из связей «группа объекта - группа иерархии» необходимо указать следующие типы прав:

·   чтение/запись для персон из этой группы иерархии;

·        чтение/запись для прочих персон, существующих в системе сайта;

·        чтение для неавторизованного пользователя (неавторизованный пользователь не имеет никаких прав записи).

При таком назначении прав естественным состоянием объекта будет видимость всеми персонами, зарегистрированными в системе. Для того, чтобы ограничить видимость объекта, необходимо явно привязать его к тем группам иерархии, где он должен быть виден, разрешить чтение для всех персон, состоящих в этих группа и запретить чтение для прочих персон как существующих в системе, так и неавторизованных.

Таким образом, система отображения объектов является с одной стороны очень гибкой, что позволяет настроить её под конкретную задачу, с другой стороны все связи в системе удается свести к связям типа «группа - группа», что облегчает программную реализацию данной концепции. На роль администратора может быть назначена любая персона, при этом для каждой конкретной структурной единицы можно назначить своего администратора, что позволяет равномерно распределить нагрузку по обслуживанию сайта между персонами, состоящими в научной группе.

По умолчанию в системе существует один «суперадминистратор» - администратор связанный группой иерархии, являющей корнем дерева структурно-содержательной схемы. Любой пользователь может зайти на сайт и заполнить форму для регистрации, в которой необходимо указать кроме стандартной информации также к какой структурной единице этот пользователь хочет быть привязан. После этого администратор этой структурной группы принимает решение о том зарегистрировать данного пользователя или нет. Администраторов в конкретную группу могут назначать администраторы всех вышестоящих групп иерархии.

Новые объекты в системе могут создавать только зарегистрированные пользователи. При создании объекта, также требуется указать, к какой группе-иерархии его следует привязать, после чего администратор этой группы либо одобряет добавление объекта, либо отвергает его. Удалить объект может только его владелец или администраторы групп иерархии, к которым привязан объект и всех групп родителей данных групп. При удалении объект физически не удаляется, а помечается как «удаленный» и после этого не отображается обычным персонам, однако администраторы могут восстановить его.

Достаточно часто научные институты сотрудничают между собой, и тогда возникает необходимость каким-то образом включить в существующую структуру сотрудников из других научных групп. Таких сотрудников можно привязывать как к уже существующим группам иерархии, так и создавать новые группы, для решения конкретных задач сотрудниками из различных институтов.

4.2 База данных


Для реализации описанной системы безопасности была разработана база данных. Для механизма регистрации и авторизации пользователей используется встроенная система регистрации и авторизации, реализованная в технологии ASP.NET. Такое решение было выбрано, чтоб надежно защитить личные данные пользователя и при этом не тратить время на разработку собственной системы авторизации и регистрации. Стандартные средства ASP.NET позволяют регистрировать пользователя, удалять и изменять его данные, пароли пользователя автоматически шифруются. Также существует механизм управления сессиями, который позволяет пользователям не авторизоваться при каждом входе на сайт, а сделать это единожды, и при этом быть уверенными в сохранности их паролей. Поэтому база данных представляет из себя стандартный набор таблиц, необходимы технологии ASP.NET для реализации своих встроенных функций и таблицы, разработанные и созданные в рамках разработанной концепции сайта.

Таблицы с префиксом aspnet созданы для корректной работы стандартных функций технологии ASP.NET, в них хранится та информация о пользователях зарегистрированных в системе, которая необходима для регистрации, аунтефикации пользователей, а также контроля их учетных записей. Всю информацию о данных таблицах можно найти в официальной документации компании Microsoft, поэтом не будем рассматривать их подробно.

Рассмотрим подробнее таблицы, созданные для реализации разработанной подсистемы безопасности.

Рис. 4.2. Схема базы данных

В таблице Person хранится информация о персонах, зарегистрированных на сайте - их фамилия, имя, отчество, степень и звания, ссылки на страницы вне данного сайта. Структура таблицы Person представлена в табл. 4.1.

Таблица 4.1

Таблица Person

Название поля

Тип данных

Комментарий

id

uniqueidentifier

Уникальное поле - первичный ключ

userId

uniqueidentifier

Поле, существующее для связи с таблицей aspnet_User

surname

nvarchar(MAX)

Фамилия сотрудника

name

nvarchar(MAX)

Имя сотрудника

patronymic

nvarchar(MAX)

Отчество сотрудника

degrees

nvarchar(MAX)

Ученая степень сотрудника

ranks

nvarchar(MAX)

Званья сотрудника

personal_page

nvarchar(MAX)

Страница вне сайта

id_own_group

uniqueidentifier

Указатель на одноименную группу персоны


Таблицы Contact и ContactType содержат информацию о различных контактах той или иной персоны, зарегистрированной в системе. Для того чтобы иметь возможность хранить различные виды контактов для пользователей, было создано две таблицы. Первая ContactType - таблица справочник, в которой перечислены все типы контактов, существующих в системе, например - домашний телефон, сотовый телефон, ICQ, и т.д. В таблице Contact хранятся записи, указывающие какому сотруднику какой контакт соответствует, и какой он при этом имеет тип. Структура таблицы ContactType представлена в табл. 4.2, Contact - в табл. 4.3.

Таблица 4.2

Таблица ContactType

Название поля

Тип данных

Комментарий

id

uniqueidentifier

Уникальное поле - первичный ключ

name

nvarchar(MAX)

Название типа контакта

Таблица 4.3

Таблица Contact

Название поля

Тип данных

Комментарий

id

uniqueidentifier

Уникальное поле - первичный ключ

userId

uniqueidentifier

Идентификатор персоны

type

uniqueidentifier

Идентификатор типа контакта

contact

nvarchar(MAX)

Непосредственно контакт


Таблицы Object и ObjectType содержат информацию об объектах присутствующих в системе. Возможность хранить все объекты разных типов в одной таблице достигается тем, что непосредственно данные хранятся в XML поле, которое является универсальным для всех типов объектов. Структура таблицы ObjectType представлена в табл. 4.4, Object - в табл. 4.5.

Таблица 4.4

Таблица ObjectType

Название поля

Тип данных

Комментарий

id

uniqueidentifier

Уникальное поле - первичный ключ

name

nvarchar(MAX)

Название типа объекта


Таблица 4.5

Таблица Object

Название поля

Тип данных

Комментарий

id

uniqueidentifier

Уникальное поле - первичный ключ

type

uniqueidentifier

Идентификатор типа объекта

data

xml

Данные, упакованные в xml

id_own_group

uniqueidentifier

Ссылка на одноименную группу объекта


Таблица Group содержит информацию о группах, которые существуют в системе. Все виды групп хранятся в одной таблице. Различать для каждого кортежа, информация о какой группе в нем записана позволяют специальные поля. Так для групп иерархии поле in_hierarch является ненулевым. Для групп объектов и групп персон ненулевыми являются поля id _object и id _person соответственно. Структура таблицы Group представлена в табл. 4.6.

Таблица 4.6

Таблица Group

Название поля

Тип данных

Комментарий

id

uniqueidentifier

Уникальное поле - первичный ключ

name

nvarchar(MAX)

Имя группы

parent

uniqueidentifier

Ссылка на родительскую группу - используется для групп иерархии

id_person

uniqueidentifier

Ссылка на персону - используется для групп персон

id_object

uniqueidentifier

Ссылка на объект - используется для групп объектов

in_hierarchy

bit

Флаг, определяющий входит ли группа в иерархию сайта или нет


Таблица Connect содержит информацию о связях типа «группа-группа», существующих в системе, так же в этой таблице для связей типа «группа объекта - группа иерархии» указываются права доступа для объекта. Структура таблицы Connect представлена в табл. 4.7.

Таблица 4.7

Таблица Connect

Название поля

Тип данных

Комментарий

id

uniqueidentifier

Уникальное поле - первичный ключ

id_A

uniqueidentifier

Ссылка на привязываемую группу

id_B

uniqueidentifier

Ссылка на группу, к которой осуществляется привязка

access_rights

int

Поля для указания прав на объект в рамках данной точки привязки - используется для связей типа группа объекта - группа иерархии


Группа, идентификатор которой записан в поле ID_A, считается привязанной к группе, идентификатор которой записан в поле ID_B. Связь несимметричная: если группа A привязана к группе B, то группа B, вообще говоря, не привязана к группе A.

Отдельно следует отметить наличие двух связей между таблицами Person и Group. С одной стороны, связь вида Person.id_own_group => Group.id необходима для определения, какая группа является «своей» для заданной персоны. С другой стороны связь Group. id_person => Person.id необходима для того, чтобы можно было идентифицировать заданную группу как группу персоны. Подобным образом объясняется наличие двух связей между таблицами Object и Group. В противном случае нельзя было бы отличить группу персоны от группы объекта. Также, в системе существует группы с суффиксом _admin, которые тоже не являются группами иерархии и в тоже время это не группы объектов и не группы персон.

Чтобы избавиться от таких на первый взгляд нелогичных связей, можно вместо одной таблицы Group создать несколько таблиц, для каждой их типов групп. Но в данном случае очень громоздко будут реализовываться связи типа группа - группа, так каждый из типов групп будет различим между собой. Поэтому при реализации был выбран вариант с двумя связями.

В данном случае приходится соблюдать жесткие правила создания и удаления записей в таблицы Person, Object и Group. Так как в таблице Group поля id_person и id_object могут принимать нулевые значения, то процесс добавления записей необходимо осуществлять по определенному алгоритму. Рассмотрим его на пример добавления записи о новой персоне и создании «своей» группы для него.

1.   В таблице Group создать «свою» группу для создаваемого пользователя. При этом в поле id_person и id_object записывается значение null.

2.       В таблице Person создать персону и указать в поле id_own_group связь на ранее созданную группу.

.        В таблице Group для созданной записи «своей» группы изменить значения поля id_person с null на Person.id.

Данный алгоритм реализован в функции RegisterUser_CreatedUser(object sender, EventArgs e), полный код которой приведен в приложении.

Аналогично происходит вставка записи о новом объекте.

5. ИНСТРУКЦИЯ ПОЛЬЗОВАТЕЛЯ


Рассмотрим по шагам окна, открывающиеся обыкновенному пользователю.

На рис. 5.1 показано окно, которое увидит при входе на сайте незарегистрированный пользователь.

Рис. 5.1. Вид окна при входе незарегистрированного пользователя

При нажатии клавиши зарегистрироваться отобразится страница представленная на рис. 5.2.

После того как пользователь зарегистрируется, появится возможность войти на сайт под своим аккаунтом, используя для этого поля ввода в правом верхнем углу страницы. Теперь выберем раздел «Новости» и перейдем к страничке структурного подразделения - «Отдел 2». При это отобразится страница представленная на рис. 5.3.


Рис. 5.3. Главная страница для зарегистрированного пользователя

Как можно увидеть, в этом отделе нет ни одной новости. Для создания своей новости необходимо нажать на кнопку «Добавить новость». При этом пользователь увидит окно, представлено на рис. 5.4.

Рис. 5.4. Добавление новости

После нажатия на кнопку добавить, на странице подразделения «Отдел2» отобразится новость. При этом так как пользователь является владельцем этого объекта, он видит кнопку «Редактировать». При нажатии на ней, пользователь увидит страницу, подобную странице добавления новости и будет иметь возможность исправить её. Вид страницы отдела 2 после добавления новости представлен на рис. 5.5.

Рис. 5.5. Новость на странице подразделения

В правом верхнем углу расположена группа кнопок. Кнопка «Выйти» - при её нажатии пользователь вновь увидит страницу, представленную на рис. 6.1. «Удалить пользователя» - при нажатии на эту кнопку, пользователь удаляет свой профиль. «Личный кабинет» при нажатии на эту кнопку, пользователь сможет отредактировать свои данные. Вид окна редактирования приведен на рис. 5.6.

Рис. 5.6. Редактирования данных пользователя

6. ИНСТРУКЦИЯ АДМИНИСТРАТОРА


Все специальные возможности, доступные администратору находятся в его личном кабинете. Страница личного кабинета администратора на рис. 6.1.

Рис. 6.1. Личный кабинет администратора

Рассмотрим самые важные действия, выполняемы администратором.

Создание нового узла. При этом указывается имя нового узла и его родительский элемент. Страница создания нового узла на рис. 6.2.

Модерация новостей. На этой странице администратор видит, в каком отделе пользователи хотят создать свои объекты и либо разрешает, либо запрещает эти действия. Страница модерации новостей на рис. 6.3. При этом видно, что в иерархии сайта стало на один узел больше.

Рис. 6.2. Страница создания нового узла

Рис. 6.3. Страница модерации новостей

Назначение администратора. На этой странице администратор может назначить других администраторов вовсе отделы, которые располагаются ниже его. На рис. 6.4. Страница назначения администратора, которую можно увидеть, если войти под аккаунтом «Суперадминистратора».

Рис. 6.4. Страница назначения администратора

ЗАКЛЮЧЕНИЕ


В ходе проделанной работы были изучены существующие на рынке конструкторы сайтов, проанализированы их достоинства и недостатки. Был разработан свой собственный конструктор, который отвечает требованиям, предъявляемым конструктору сайтов научных групп. При этом были изучены существующие сегодня технологии для создания веб-приложений, из которых была выбрана одна, для реализации конструктора сайта.

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

В программном коде реализованы клиентский модуль и модуль администрирования. Существующий вариант приложения в настоящее время активно тестируется. В скором времени планируется ввод в действие продукта в Институте Математики и Механики.

 

БИБЛИОГРАФИЧЕСКИЙ СПИСОК

веб приложение сайт

1.   Эспозито Д. Microsoft ASP.NET 2.0. Базовый курс. Мастер-класс.: Пер. с англ. - М.: Издательство «Русская Редакция»; СПб. : Питер, 2007. 688 c.

2.       Сандерсон С. ASP.NET MVC Framework с примерами на С# для профессионалов.: Пер. с англ. - М.: ООО «И.Д.Вильямс», 2010. 560 c.

.        Рейл Д. Создание приложений Microsoft ASP.NET.: Пер. с англ. - Издательство «Русская Редакция, 2002. 481 c.

.        Дейт К. SQL и реляционная теория. Как грамотно писать код на SQL. М.: Издательство «Символ», 2010. 480 c.

.        Чан У., Форсье Дж. Django. Разработка веб-приложений на Python. М.: Издательство «Символ», 2010. 456 c.

 

ПРИЛОЖЕНИЕ

 

Текст программы

 

. Файл Site.Master

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="OwnUserData.SiteMaster" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">

<head runat="server">

<title></title>

<link href="~/Styles/Site.css" rel="stylesheet" type="text/css" />

<asp:ContentPlaceHolder ID="HeadContent" runat="server">

</asp:ContentPlaceHolder>

</head>

<body>

<form runat="server">

<div>

<asp:HyperLink runat="server" NavigateUrl="~/Default.aspx" ID="HyperTitle" CssClass="hyper_title">

<div>

<div>

<h1>

Конструктор научных сайтов

</h1>

</div>

<div>

</div>

</div>

</asp:HyperLink>

<div>

<table>

<tr>

<td>

<asp:LoginView ID="HeadLoginView" runat="server" EnableViewState="false">

<AnonymousTemplate>

<asp:HyperLink ID="RegisterHyperLink" runat="server" EnableViewState="false">Зарегистрироваться</asp:HyperLink>

<asp:Login ID="LoginUser" runat="server" EnableViewState="false" RenderOuterTable="false">

<LayoutTemplate>

<asp:Label ID="UserNameLabel" runat="server" AssociatedControlID="UserName">Имя:</asp:Label>

<asp:TextBox ID="UserName" runat="server" CssClass="textEntryTop">

</asp:TextBox>

<asp:RequiredFieldValidator ID="UserNameRequired" runat="server" ControlToValidate="UserName"="failureNotification" ErrorMessage="User Name is required." ToolTip="User Name is required."="LoginUserValidationGroup">*</asp:RequiredFieldValidator>

<asp:Label ID="PasswordLabel" runat="server" AssociatedControlID="Password">Пароль:</asp:Label>

<asp:TextBox ID="Password" runat="server" CssClass="passwordEntryTop" TextMode="Password">

</asp:TextBox>

<asp:RequiredFieldValidator ID="PasswordRequired" runat="server" ControlToValidate="Password"="failureNotification" ErrorMessage="Password is required." ToolTip="Password is required."="LoginUserValidationGroup">*</asp:RequiredFieldValidator>

<asp:Button ID="LoginButton" runat="server" CommandName="Login" Text="Войти" ValidationGroup="LoginUserValidationGroup" />

</LayoutTemplate>

</asp:Login>

</AnonymousTemplate>

<LoggedInTemplate>

<asp:Label ID="GreetText" runat="server" />,

<asp:Label ID="UserNameText" runat="server" />

[

<asp:LoginStatus ID="HeadLoginStatus" runat="server" LogoutAction="Redirect" LogoutText="Выйти"="~/" />

] [

<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/Account/DeletePage.aspx">Удалить пользователя</asp:HyperLink>

] [

<asp:HyperLink ID="PersonalPage" runat="server" NavigateUrl="~/PersonalPage/Personal.aspx">Личный кабинет</asp:HyperLink>

]

</LoggedInTemplate>

</asp:LoginView>

</td>

</tr>

<tr>

<td>

<asp:TreeView ID="TreeMenu" runat="server" ImageSet="Arrows">

<HoverNodeStyle Font-Underline="True" ForeColor="#5555DD" />

<Nodes>

<asp:TreeNode Text="Институт" Value="Институт">

<asp:TreeNode Text="Отдел1" Value="Отдел1">

<asp:TreeNode Text="Отдел4" Value="Отдел4"></asp:TreeNode>

</asp:TreeNode>

<asp:TreeNode Text="Отдел2" Value="Отдел2"></asp:TreeNode>

<asp:TreeNode Text="Отдел3" Value="Отдел3">

<asp:TreeNode Text="Отдел5" Value="Отдел5">

<asp:TreeNode Text="новый отдел" Value="Новый отдел"></asp:TreeNode>

</asp:TreeNode>

</asp:TreeNode>

</asp:TreeNode>

</Nodes>

<NodeStyle Font-Names="Verdana" Font-Size="8pt" ForeColor="Black" HorizontalPadding="5px"="0px" VerticalPadding="0px" />

<ParentNodeStyle Font-Bold="False" />

<SelectedNodeStyle Font-Underline="True" ForeColor="#5555DD" HorizontalPadding="0px"="0px" />

</asp:TreeView>

</td>

<td>

<asp:ContentPlaceHolder ID="MainContent" runat="server" />

</td>

</tr>

<tr>

<td valign="top" align="center">

<asp:ContentPlaceHolder ID="NewsContentPlaceHolder" runat="server">

<p><asp:HyperLink ID="NewsLink" runat="server" NavigateUrl="~/News.aspx">Новости</asp:HyperLink></p>

<p><asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl="~/News.aspx">Конференции</asp:HyperLink></p>

<p><asp:HyperLink ID="HyperLink3" runat="server" NavigateUrl="~/News.aspx">Доклады</asp:HyperLink></p>

<p><asp:HyperLink ID="HyperLink4" runat="server" NavigateUrl="~/News.aspx">Статьи</asp:HyperLink></p>

</asp:ContentPlaceHolder>

</td>

</tr>

</table>

</div>

<div>

</div>

</div>

<div>

</div>

</form>

</body>

</html>

2. Файл Site.Master.cs

using System;System.Collections.Generic;System.Linq;System.Web;System.Web.UI;System.Web.UI.WebControls;OwnUserData

{partial class SiteMaster : System.Web.UI.MasterPage

{void Page_Load(object sender, EventArgs e)

{(!IsPostBack)

{regLink = (HyperLink)HeadLoginView.FindControl("RegisterHyperLink");(regLink != null).NavigateUrl = "Account/Register.aspx?ReturnUrl=" + HttpUtility.UrlEncode(Request.QueryString["ReturnUrl"]);dbc = new testdbDataContext();grText = (from tempGr in dbc.GreetingstempU in dbc.aspnet_Users on tempGr.UserId equals tempU.UserIdtempU.UserName == HttpContext.Current.User.Identity.NametempGr).FirstOrDefault();(grText != null)

{label = (Label)HeadLoginView.FindControl("GreetText");.Text = grText.Greeting1;

}pers = (from tempGr in dbc.PersonstempU in dbc.aspnet_Users on tempGr.userId equals tempU.UserIdtempU.UserName == HttpContext.Current.User.Identity.NametempGr).FirstOrDefault();(pers != null)

{label = (Label)HeadLoginView.FindControl("UserNameText");.Text = pers.name + " " + pers.patronymic;

}gr = new Group();hier_gr = (from Grp in dbc.GroupsGrp.in_hierarchy == trueGrp);= hier_gr.Single(c => c.parent == null);_gr = (from Grp in hier_grGrp.parent!=nullGrp);root = new TreeNode();root1 = new TreeNode();root2 = new TreeNode();root3 = new TreeNode();root4 = new TreeNode();.Text = gr.name;.NavigateUrl = "~/Default.aspx";.Text = "Отдел1";.NavigateUrl = "~/Default.aspx";.Text = "Отдел2";.NavigateUrl = "~/Default.aspx";.Text = "Отдел3";.NavigateUrl = "~/Default.aspx";.Text = "Отдел4";.NavigateUrl = "~/Default.aspx";.ChildNodes.Add(root1);.ChildNodes.Add(root2);.ChildNodes.Add(root3);.Nodes.Add(root);.Nodes.Add(root4);

}

}

}

}

3. Файл Register.aspx

<%@ Page Title="Register" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"="Register.aspx.cs" Inherits="OwnUserData.Account.Register" %>

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">

</asp:Content>

<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">

<asp:CreateUserWizard ID="RegisterUser" runat="server" EnableViewState="False" OnCreatedUser="RegisterUser_CreatedUser"="#EFF3FB" BorderColor="#B5C7DE" BorderStyle="Solid" BorderWidth="1px"Names="Verdana" Font-Size="0.8em">

<HeaderStyle BackColor="#284E98" BorderColor="#EFF3FB" BorderStyle="Solid" BorderWidth="2px"Bold="True" Font-Size="0.9em" ForeColor="White" HorizontalAlign="Center" />

<LayoutTemplate>

<asp:PlaceHolder ID="wizardStepPlaceholder" runat="server"></asp:PlaceHolder>

<asp:PlaceHolder ID="navigationPlaceholder" runat="server"></asp:PlaceHolder>

</LayoutTemplate>

<CreateUserButtonStyle BackColor="White" BorderColor="#507CD1" BorderStyle="Solid"="1px" Font-Names="Verdana" ForeColor="#284E98" />

<WizardSteps>

<asp:CreateUserWizardStep ID="RegisterUserWizardStep" runat="server">

<ContentTemplate>

<h2>

Регистрация нового пользователя

</h2>

<p>

Воспользуйтись формой, представленной ниже для регистрации нового аккаунта

</p>

<p>

Минимальная длина пароля

<%=Membership.MinRequiredPasswordLength %>

символ.

</p>

<span>

<asp:Literal ID="ErrorMessage" runat="server"></asp:Literal>

</span>

<asp:ValidationSummary ID="RegisterUserValidationSummary" runat="server" CssClass="failureNotification"="RegisterUserValidationGroup" />

<div>

<fieldset>

<legend>Информация о пользователе</legend>

<p>

<asp:Label ID="UserNameLabel" runat="server" AssociatedControlID="UserName">Логин:</asp:Label>

<asp:TextBox ID="UserName" runat="server" CssClass="textEntry"></asp:TextBox>

<asp:RequiredFieldValidator ID="UserNameRequired" runat="server" ControlToValidate="UserName"="failureNotification" ErrorMessage="User Name is required." ToolTip="User Name is required."="RegisterUserValidationGroup">*</asp:RequiredFieldValidator>

</p>

<p>

<asp:Label ID="EmailLabel" runat="server" AssociatedControlID="Email">E-mail:</asp:Label>

<asp:TextBox ID="Email" runat="server" CssClass="textEntry"></asp:TextBox>

<asp:RequiredFieldValidator ID="EmailRequired" runat="server" ControlToValidate="Email"="failureNotification" ErrorMessage="E-mail is required." ToolTip="E-mail is required."="RegisterUserValidationGroup">*</asp:RequiredFieldValidator>

</p>

<p>

<asp:Label ID="PasswordLabel" runat="server" AssociatedControlID="Password">Пароль:</asp:Label>

<asp:TextBox ID="Password" runat="server" CssClass="passwordEntry" TextMode="Password"></asp:TextBox>

<asp:RequiredFieldValidator ID="PasswordRequired" runat="server" ControlToValidate="Password"="failureNotification" ErrorMessage="Password is required." ToolTip="Password is required."="RegisterUserValidationGroup">*</asp:RequiredFieldValidator>

</p>

<p>

<asp:Label ID="ConfirmPasswordLabel" runat="server" AssociatedControlID="ConfirmPassword">Подтверждение пароля:</asp:Label>

<asp:TextBox ID="ConfirmPassword" runat="server" CssClass="passwordEntry" TextMode="Password"></asp:TextBox>

<asp:RequiredFieldValidator ControlToValidate="ConfirmPassword" CssClass="failureNotification"="Dynamic" ErrorMessage="Confirm Password is required." ID="ConfirmPasswordRequired"="server" ToolTip="Confirm Password is required." ValidationGroup="RegisterUserValidationGroup">*</asp:RequiredFieldValidator>

<asp:CompareValidator ID="PasswordCompare" runat="server" ControlToCompare="Password"="ConfirmPassword" CssClass="failureNotification" Display="Dynamic"="The Password and Confirmation Password must match." ValidationGroup="RegisterUserValidationGroup">*</asp:CompareValidator>

</p>

<p>

<asp:Label ID="Label2" runat="server" AssociatedControlID="GreetText">Ваше приветствие:</asp:Label>

<asp:TextBox ID="GreetText" runat="server" CssClass="textEntry"></asp:TextBox>

<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="GreetText"="failureNotification" ErrorMessage="Greeting text is required." ToolTip="Greeting text is required."="RegisterUserValidationGroup">*</asp:RequiredFieldValidator>

</p>

<p>

<asp:Label ID="SurnameLabel" runat="server" AssociatedControlID="SurnameText">Фамилия:</asp:Label>

<asp:TextBox ID="SurnameText" runat="server" CssClass="textEntry"></asp:TextBox>

<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="SurnameText"="failureNotification" ErrorMessage="Greeting text is required." ToolTip="Surname text is required."="RegisterUserValidationGroup">*</asp:RequiredFieldValidator>

</p>

<p>

<asp:Label ID="NameLabel" runat="server" AssociatedControlID="NameText">Имя:</asp:Label>

<asp:TextBox ID="NameText" runat="server" CssClass="textEntry"></asp:TextBox>

<asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ControlToValidate="NameText"="failureNotification" ErrorMessage="Greeting text is required." ToolTip="Name text is required."="RegisterUserValidationGroup">*</asp:RequiredFieldValidator>

</p>

<p>

<asp:Label ID="PatronymicLabel" runat="server" AssociatedControlID="PatronymicText">Отчество:</asp:Label>

<asp:TextBox ID="PatronymicText" runat="server" CssClass="textEntry"></asp:TextBox>

<asp:RequiredFieldValidator ID="RequiredFieldValidator4" runat="server" ControlToValidate="PatronymicText"="failureNotification" ErrorMessage="Greeting text is required." ToolTip="Patronymic text is required."="RegisterUserValidationGroup">*</asp:RequiredFieldValidator>

</p>

</fieldset>

<p>

<asp:Button UseSubmitBehavior="true" ID="CreateUserButton" runat="server" Text="Создать"="RegisterUserValidationGroup" CommandName="MoveNext" />

</p>

</div>

</ContentTemplate>

<CustomNavigationTemplate>

</CustomNavigationTemplate>

</asp:CreateUserWizardStep>

</WizardSteps>

</asp:CreateUserWizard>

</asp:Content>

4. Файл Register.aspx.cs

using System;System.Collections.Generic;System.Linq;System.Web;System.Web.Security;System.Web.UI;System.Web.UI.WebControls;OwnUserData.Account

{partial class Register : System.Web.UI.Page

{void Page_Load(object sender, EventArgs e)

{.ContinueDestinationPageUrl = Request.QueryString["ReturnUrl"];

}void RegisterUser_CreatedUser(object sender, EventArgs e)

{

/*

<!-- <asp:TemplatedWizardStep ID="RegisterUserWizardStep" runat="server"> -->

<!-- </asp:TemplatedWizardStep> -->

*/.SetAuthCookie(RegisterUser.UserName, false /* createPersistentCookie */);dbc = new testdbDataContext();<aspnet_User> users = dbc.aspnet_Users.Where(w => w.UserName == RegisterUser.UserName);gr = new Greeting();.id = Guid.NewGuid();.UserId = users.First<aspnet_User>().UserId;.Greeting1 = ((TextBox)RegisterUser.CreateUserStep.ContentTemplateContainer.FindControl("GreetText")).Text;.Greetings.InsertOnSubmit(gr);.SubmitChanges();grp = new Group();.id = Guid.NewGuid();.name = users.First<aspnet_User>().UserName;.in_hierarchy = false;.Groups.InsertOnSubmit(grp);.SubmitChanges();pr = new Person();.id = Guid.NewGuid();.userId = users.First<aspnet_User>().UserId;.surname = ((TextBox)RegisterUser.CreateUserStep.ContentTemplateContainer.FindControl("SurnameText")).Text;.name = ((TextBox)RegisterUser.CreateUserStep.ContentTemplateContainer.FindControl("NameText")).Text;.patronymic = ((TextBox)RegisterUser.CreateUserStep.ContentTemplateContainer.FindControl("PatronymicText")).Text;.id_own_group = grp.id;.SubmitChanges();.Persons.InsertOnSubmit(pr);.SubmitChanges();.id_person = pr.id;.SubmitChanges();continueUrl = RegisterUser.ContinueDestinationPageUrl;(String.IsNullOrEmpty(continueUrl))

{= "~/";

}.Redirect(continueUrl);

}

}

}

Похожие работы на - Конструктор научных сайтов

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!