Курс. NETХорошая книга Федерико Бьянкуцци… Пионеры программирования. Хорошая
Курс .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-TextBox-ValidationMessage После заполнения БД изменить её структуру и реализовать блок миграции
MemberShip
Для чего нужен membership + roleManager То, что в каждом сайте есть пользователи – стандарт. То, что для разных пользователей разный доступ на основании ролей, которые имеет пользователь – стандарт Есть стандартная реализация membership + roleManager, которая реализует механизм учета пользователей, предоставления прав пользователя, контроль прав доступа.
Типы аутентификации (1) аутентификация Windows - применяется для идентификации и авторизации пользователей в зависимости от привилегий учетной записи пользователя. Работает аналогично обычным механизмам сетевой безопасности Windows и выполняется контроллером домена; Реально используется слабо
Типы аутентификации (2) аутентификация Forms - пользователь вводит логин и пароль в Web -форме, после чего авторизация происходит по списку пользователей, хранящемуся, например, в базе данных. Используется почти повсеместно
После создания приложения с Forms аутентификацией
Продолжение Следует отметить, что что после регистрации первого пользователя (вроде…) в AppData появляется Бд. И как следствие, в тестах возможно надо покрутить строку подключения
Рекомендация Заполняйте пользователей с использованием тестов – проще будет распространять между разработчиками. Зам – изменить путь до БД для демонстрации
Контроль прав доступа Пользователи все делятся на авторизированный и не авторизированных Есть множество допустимых ролей. В 99% случаев множество ролей для сайта заранее фиксировано, поэтому используется атрибутивный контроль доступа. Атрибут контроля доступа может быть поставлен на метод контроллера или на весь контроллер. Так же можно дать доступ на основании имени пользователя (правда это решение весьма экзотично)
Атрибуты доступа [Authorize] [Authorize] с указанием имен пользователей [Authorize] с указанием названий ролей
Если нужна более тонкая настройка
Методы-расширители для облегчения «Code map»
Суть проблемы Мы запустили сайт и как верстальщики видим элемент, на который надо добавить класс. Но! У нас сайт, на нем шапка и подвал, под шапкой личный кабинет, под личным кабинетом – покупки. В покупках оплаченные и не оплаченные товары. Товары группируются по производителю. У производителя – по категориям. И в товарах есть краткая информация о товаре, в которой находится текст, который надо сделать жирным. Человека, который может сказать, какой же view в конечном счете используется – нет Надо: пройти через 6 view и в конечном счете найти с N-ой попытки какой же view используется.
Решение Сделать свой собственный метод-расширитель HtmlHelper, который будет добавлять нужную информацию
Пример 2. Часто приходитcя группировать label, что-то, validationMessage Часть нужно делать что-то типа Название Поле для ввода Сообщение валидации
Сервисы
Сервис-ориентированное программирование Уже используется повсеместно Позволяет разрабатывать различные части на разных языках Удобно Многие сторонние организации предоставляют какой-либо API который по сути является сервисом, например платежные шлюзы
Сервис (структура) Контракт Сервис Тот, кто опрашивает сервис. Для обмена данными используются сообщения
Сообщения Тип Post Get Формат данных Xml Json (newtonsoft) Входные данные Простой тип Сложный тип Выходные данные Простой тип Сложный тип
Сервисы (.NET) Реализуется с помощью WCF – windows communication foundation
Запуск сервиса Создается контракт к классу Запускается хост для сервиса Происходит работа с сервисом Закрывается хост
Пример Json + простые входные и выходные типы
Xml + сложные входные типы + простой выходной Атрибут DataContract
Xml + сложные входные/выходные данные Важное следствие – выходные данные в конечном счете строка. Поэтому все «сложные» данные (выходные) по сути используются только для преобразований и компиляции. В конечном счете выход – строка. Да и вход – тоже строка
Get Ограничение по объему передаваемых данных
Json + сложные данные
all_2013_07_23.ppt
- Количество слайдов: 32