Опубликован: 08.07.2011 | Доступ: свободный | Студентов: 1772 / 93 | Оценка: 4.15 / 4.08 | Длительность: 15:28:00
Лекция 8:

Разработка многофункциональных бизнес-приложений

Аутентификация и авторизация пользователей

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

Для настройки Windows- авторизации в проекте EnterpriceBusinessApplication.Web для файла Web.config необходимо свойству mode объекта authentication установить значение Windows.

<authentication mode="Windows"/ >

В клиентском проекте EnterpriceBusinessApplication в конструкторе класса App для свойства аутентификации Authentication веб конекста webContext присвоить значение вновь созданного экземпляра класса Windows аутентификации – WindowsAuthentication.

public App()
{
	InitializeComponent();
	WebContext webContext = new WebContext();
	webContext.Authentication = new WindowsAuthentication();
	this.ApplicationLifetimeObjects.Add(webContext);
}

После загрузки приложения происходит автоматически Windows-авторизация пользователя ( рис. 10.41).

Windows-авторизация

увеличить изображение
Рис. 10.41. Windows-авторизация

Для аутентификации зарегистрированных в приложении пользователей в проекте EnterpriceBusinessApplication.Web для файла Web.config необходимо свойству mode объекта authentication установить значение Forms и задать имя форы.

<authentication mode="Forms">
      <forms name=".EnterpriceBusinessApplication_ASPXAUTH" />
</authentication>

В конструкторе клиентского класса App следует для свойства аутентификации Authentication веб контекста webContext создать экземпляр класса пользовательской авторизации FormsAuthentication.

public App()
{
	InitializeComponent();
	WebContext webContext = new WebContext();
	webContext.Authentication = new FormsAuthentication();
	this.ApplicationLifetimeObjects.Add(webContext);
}

Нового пользователя при открытии приложения необходимо зарегистрировать ( рис. 10.42). Зарегистрированный пользователь должен пройти аутентификацию ( рис. 10.43). Если аутентификация прошла успешно, то на странице приложения выводится имя пользователя, работающего с приложением ( рис. 10.44).

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

увеличить изображение
Рис. 10.42. Регистрация нового пользователя
Аутентификация пользователя

увеличить изображение
Рис. 10.43. Аутентификация пользователя
Вход в приложение зарегистрированного пользователя

увеличить изображение
Рис. 10.44. Вход в приложение зарегистрированного пользователя

Если имя пользователя или пароль введены с ошибкой, то аутентификация пользователя не проходит ( рис. 10.45).

Отказ в аутентификации пользователя

увеличить изображение
Рис. 10.45. Отказ в аутентификации пользователя

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

Таким образом, аутентификация осуществляется на этапе регистрации пользователя, а авторизация реализуется на базе аутентификации с применением механизма ролей.

Для создания ролей необходимо настроить конфигурацию ASP.NET приложения. Для проекта EnterpriceBusinessApplication.Web приложения необходимо в меню Проект выбрать пункт Конфигурация ASP.NET ( рис. 10.46).

Выбор настройки конфигурации ASP.NET

увеличить изображение
Рис. 10.46. Выбор настройки конфигурации ASP.NET

На странице администрирования веб-узла ( рис. 10.47) следует открыть вкладку Безопасность ( рис. 10.48).

Страница администрирования веб-узла

увеличить изображение
Рис. 10.47. Страница администрирования веб-узла
Вкладка безопасность страницы администрирования веб-узла

увеличить изображение
Рис. 10.48. Вкладка безопасность страницы администрирования веб-узла

Выбрав ссылку "Создание ролей и управления ими" перейдем на страницу, где создадим две новые роли: администратор и оператор ( рис. 10.49).

Создание ролей приложения

увеличить изображение
Рис. 10.49. Создание ролей приложения

Для создания новых пользователей выберем ссылку "Создать пользователя" и создадим два новых пользователя – одного с ролью Адмитистратор, а другого – "Оператор" ( рис. 10.50).

Создание нового пользователя с заданием роли

увеличить изображение
Рис. 10.50. Создание нового пользователя с заданием роли

На странице администрирования веб-узла ( рис. 10.48) предоставляются возможности создания и управления пользователями, ролями и правилами доступа.

Для разграничения прав доступа различных пользователей к приложению используются атрибуты для классов и методов службы домена. Если ставится задача ограничить доступ к таблице Employee только зарегистрированным пользователям, метод загрузки данных GetEmployees() для этой таблицы класса EmployeeDomainService должен быть отмечен атрибутом RequiresAuthentication().

[RequiresAuthentication()]
public IQueryable<Employee> GetEmployees()

При переходе на страницу Сотрудники незарегистрированным пользователем будет выдано сообщение об ошибке загрузки данных ( рис. 10.51).

Отказ в доступе для незарегистрированного пользователя

увеличить изображение
Рис. 10.51. Отказ в доступе для незарегистрированного пользователя

Если переход на страницу Сотрудники осуществляет зарегистрированный пользователь, то загрузка данных будет проведена без ошибок ( рис. 10.52).

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

увеличить изображение
Рис. 10.52. Разрешен доступ для зарегистрированного пользователя

Если требуется разграничить роли пользователей при выполнении определенных операций, то следует применять атрибут RequiresRole ("Имя роли"). Так если оператору, как зарегистрированному пользователю, разрешено только просматривать список сотрудников, а операции модификации, удалении и создания новых данных по сотрудника разрешается выполнять пользователю с ролью администратор, соответствующие методы должны быть отмечены атрибутами RequiresRole (" администратор ").

[RequiresRole("администратор")]
public void InsertEmployee(Employee employee)
    { . . . }

[RequiresRole("администратор")]
public void UpdateEmployee(Employee currentEmployee)
        { . . . }

[RequiresRole("администратор")]
public void DeleteEmployee(Employee employee)
        { . . . }

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

Ключевые термины

Службы RIA Services, шаблон Silverlight Business Application, авторизация, аутентификация, регистрация пользователя, локализация приложения, EDM-модель, группировка данных, фильтрация данных, дочернее окно Silverlight, валидация, роль пользователя

Windows Communication Foundation, WCF, Rich Internet application, RIA, RIA Services, Silverlight Business Application, Domain Service Class, ObjectContext, BusyIndicator, PageSize, AutoCompleteBox, ChildWindow, Authentication, webContext.

Краткие итоги

Рассмотрены вопросы построения приложения Silverlight на базе шаблона Business Application. При проектировании бизнес-приложения проанализированы подходы к локализации, созданию EDM-модели данных и службы WCF RIA Services, построению пользовательского интерфейса с использованием источников данных и автоматической генерации представления данных, вопросы сортировки и фильтрации информации в пользовательских интерфейсных элементах, реализацию функция модификации, вставки, удаления и валидации данных, аутентификацию и авторизацию пользователей.

Ресурсы для углубленного изучения

  1. Опубликованы новые материалы по Silverlight и RIA // http://blogs.msdn.com/b/rudevnews/archive/2010/10/10/silverlight-ria.aspx
  2. WCF RIA Services // http://msdn.microsoft.com/ru-ru/library/ee707344(en-us,VS.91).aspx.
  3. Microsoft Silverlight // http://silverlight.net
  4. Silverlight Toolkit // http://silverlight.codeplex.com/

Вопросы для самопроверки

  • Поясните назначение служб WCF RIA Services.
  • Как организована аутентификация пользователя с бизнес-приложения Silverlight?
  • Как реализуется локализация бизнес-приложения Silverlight?
  • Зачем класс DomainService помечается атрибутом [EnableClientAccess( )]?
  • Для чего используется атрибут Display в файле метаданных?
  • Для чего используется атрибут Include в файле метаданных?
  • Поясните назначение класса BusyIndicator.
  • Поясните назначение класса PageSize.
  • Как реализуется группировка в источнике данных?
  • Как реализуется фильтрация в источнике данных?
  • Поясните функциональные возможности элемента управления AutoCompleteBox.
  • Поясните назначение валидации данных.
  • Как можно реализовать валидацию в бизнес-приложения Silverlight?
  • Какие способы аутентификации предусмотрены в бизнес-приложения Silverlight?
  • Для чего можно использовать роли в бизнес-приложения Silverlight?

Заключение

При написании данного курса ставилась цель представить основные возможности технологии WPF и Silverlight для разработки приложений. Многие вопросы не вошли в данное пособие. Это прежде всего использование средств разработки Expression Design и Expression Blend, работа со звуком и видео, анимация, деловая графика, вопросы интеграции приложений с другими системами, например SharePoint Services.

Технологии Microsoft постоянно развиваются, так на момент завершения работы над пособием вышли пакет обновлений Visual Studio 2010 SP1, новая версия библиотеки WCF Data Services , которая предназначена для поддержки открытого стандарта обмена данными OData на платформе .NET, библиотека WCF RIA Services V1.0 SP1 для Silverlight 4, которая упрощает традиционный n-уровневый шаблон приложения путем согласования платформ ASP.NET и Silverlight.

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

Замечания, пожеления и ваше мнение по данному пособию можно направлять по адресу alexdoljenko@mail.ru.

Александр Петров
Александр Петров

При загрузке данных из БД возникает исключение InvalidOperationException с сообщением: Элемент коллекции должен быть пустым перед использованием ItemsSource. Знаю, что для заполнения DataGrid можно использовать коллекции Items или ItemsSource, но одновременно их использовать нельзя: если задано значение для свойства ItemsSource и в коде C# добавляется элемент в Items, возникает исключение. 
Вопрос, как отследить и отключить добавление элемента в Items?

Максим Спиридонов
Максим Спиридонов

В пятой лекции на второй странице в компиляторе выскакивает ошибка в строчке :

ObjectQuery<Employee> employees = DataEntitiesEmployee.Employees;

Ошибка CS0029

Не удается неявно преобразовать тип "System.Data.Entity.DbSet<WpfApplProject.Employee>" в "System.Data.Entity.Core.Objects.ObjectQuery<WpfApplProject.Employee>".

в using прописал все как положено, здесь похоже именно с преобразованием типов проблемы