all_2013_07_23.ppt
- Количество слайдов: 32
Курс. NET
Хорошая книга • Федерико Бьянкуцци… • Пионеры программирования
Хорошая книга • IT проекты. Фронтовые очерки • Джо Мараско
Орг. вопросы • Включить камеру • Отметить присутствующих • След. Занятие – 25 число (пятница)
Выпускное задание (1/3) • Реализовать сайт с использованием CRUD сущностей. Создать три роли, у одной из них – право на чтение одного списка сущностей и CRUD другого, у другой – CRUD обоих списков сущностей. , у третьей – право на чтение обоих списков. – Пример. Список магазинов – товары магазина. Есть роль менеджера, который может редактировать и магазины и товары в них. Есть роль продавцов, которые может редактировать только роль в СВОЕМ магазине (и как следствие – при регистрации продавца нужно указывать магазин, к которому он относится, и регистрировать продавца может только менеджер). Есть роль покупателя, который может только просматривать список магазинов и список товаров в них. • Идентификаторы всех типов сущностей - GUID
Выпускное задание (2/3) • Наполнить данными в тестах из CVS, создать пользователей, роли, соотнести пользователей и ролей. Если в момент запуска тестов у пользователя больше ролей, чем надо, то удалить лишние роли. • Использовать GIT • Использовать систему миграций (обновлений БД) • Использовать IOC контейнер (для примера – ninject) • Реализовать unit тестирование моделей
Выпускное задание (3/3) • Реализовать два способа хранения данных на сервере – с помощью БД (2 способа – с LINQ и с Entity, при этом для LINQ реализовать логирование операций), с помощью LINQ, с помощью CSV (при этом что-либо сделав с бинарными данными) • В случае необходимости изменить с помощью условной компиляции аксессоры доступа • Использовать HTML-Extentios, которые группируют наиболее часто используемые комбинации типа Label. Text. Box-Validation. Message • После заполнения БД изменить её структуру и реализовать блок миграции
Member. Ship
Для чего нужен membership + role. Manager • То, что в каждом сайте есть пользователи – стандарт. • То, что для разных пользователей разный доступ на основании ролей, которые имеет пользователь – стандарт • Есть стандартная реализация membership + role. Manager, которая реализует механизм учета пользователей, предоставления прав пользователя, контроль прав доступа.
Типы аутентификации (1) • аутентификация Windows - применяется для идентификации и авторизации пользователей в зависимости от привилегий учетной записи пользователя. Работает аналогично обычным механизмам сетевой безопасности Windows и выполняется контроллером домена; • Реально используется слабо
Типы аутентификации (2) • аутентификация Forms - пользователь вводит логин и пароль в Web -форме, после чего авторизация происходит по списку пользователей, хранящемуся, например, в базе данных. • Используется почти повсеместно
После создания приложения с Forms аутентификацией • <membership default. Provider="Default. Membership. Provider"> • <providers> • <add name="Default. Membership. Provider" type="System. Web. Providers. Default. Membership. Provider, System. Web. Providers, Version=1. 0. 0. 0, Culture=neutral, Public. Key. Token=31 bf 3856 ad 364 e 35" connection. String. Name="Default. Connection" enable. Password. Retrieval="false « (другие параметры) /> • </providers> • </membership> • <connection. Strings> • <add name="Default. Connection" provider. Name="System. Data. Sql. Client" connection. String="Data Source=(Local. Db)v 11. 0; Initial Catalog=aspnetmembership_Mvc. Application-20130523102243; Integrated Security=SSPI; Attach. DBFilename=|Data. Directory|aspnetmembership_Mvc. Application-20130523102243. mdf" /> • </connection. Strings>
Продолжение • Следует отметить, что после регистрации первого пользователя (вроде…) в App. Data появляется Бд. • И как следствие, в тестах возможно надо покрутить строку • подключения
Рекомендация • Заполняйте пользователей с использованием тестов – проще будет распространять между разработчиками. • Зам – изменить путь до БД для демонстрации
Контроль прав доступа • Пользователи все делятся на авторизированный и не авторизированных • Есть множество допустимых ролей. • В 99% случаев множество ролей для сайта заранее фиксировано, поэтому используется атрибутивный контроль доступа. • Атрибут контроля доступа может быть поставлен на метод контроллера или на весь контроллер. • Так же можно дать доступ на основании имени пользователя (правда это решение весьма экзотично)
Атрибуты доступа • [Authorize] с указанием имен пользователей • [Authorize] с указанием названий ролей
Если нужна более тонкая настройка
Методы-расширители для облегчения «Code map»
Суть проблемы • Мы запустили сайт и как верстальщики видим элемент, на который надо добавить класс. • Но! У нас сайт, на нем шапка и подвал, под шапкой личный кабинет, под личным кабинетом – покупки. В покупках оплаченные и не оплаченные товары. Товары группируются по производителю. У производителя – по категориям. И в товарах есть краткая информация о товаре, в которой находится текст, который надо сделать жирным. • Человека, который может сказать, какой же view в конечном счете используется – нет • Надо: пройти через 6 view и в конечном счете найти с Nой попытки какой же view используется.
Решение • Сделать свой собственный методрасширитель Html. Helper, который будет добавлять нужную информацию
Пример 2. Часто приходитcя группировать label, что-то, validation. Message • • Часть нужно делать что-то типа Название Поле для ввода Сообщение валидации
Сервисы
Сервис-ориентированное программирование • Уже используется повсеместно • Позволяет разрабатывать различные части на разных языках • Удобно • Многие сторонние организации предоставляют какой-либо API который по сути является сервисом, например платежные шлюзы
Сервис (структура) • • Контракт Сервис Тот, кто опрашивает сервис. Для обмена данными используются сообщения
Сообщения Тип Формат данных • Post • Get • Xml • Json (newtonsoft) – Входные данные • Простой тип • Сложный тип – Выходные данные • Простой тип • Сложный тип
Сервисы (. NET) • Реализуется с помощью WCF – windows communication foundation
Запуск сервиса • • Создается контракт к классу Запускается хост для сервиса Происходит работа с сервисом Закрывается хост
Пример Json + простые входные и выходные типы
Xml + сложные входные типы + простой выходной • Атрибут Data. Contract
Xml + сложные входные/выходные данные • Важное следствие – выходные данные в конечном счете строка. Поэтому все «сложные» данные (выходные) по сути используются только для преобразований и компиляции. • В конечном счете выход – строка. • Да и вход – тоже строка
Get • Ограничение по объему передаваемых данных
Json + сложные данные
all_2013_07_23.ppt