Авторизация в Excel на VBA
Авторизация в Excel на VBA: создание формы, написание программного кода, особенности реализации.
В этой статье я расскажу вам о создании формы авторизации в Excel с помощью VBA.
Что же представляет из себя авторизация в Excel? Это форма, то есть окно, с запросом ввода логина и пароля, при успешном вводе которых, пользователю будут открываться различные листы документа, в зависимости от группы доступа пользователя. Точно также, помимо открытия листов, можно будет выставить ограничения на действия в Excel: запрет форматирования ячеек, удаление строк, столбцов, использование фильтров, объектов, сценариев и так далее. Но обо всем по порядку.
Авторизация в Excel: основной алгоритм работы
Для начала, необходимо разработать алгоритм, по которому мы будем работать, и выглядеть он будет примерно так:
Авторизация в Excel: макет документа
Наш рабочий документ будет состоять из четырех листов:
*VeryHidden— свойство листа, при котором сам лист скрыт и включить его отображение можно только через использование режима разработчика. Для выбора данного свойства, необходимо в Excel зайти в меню «Разработчик» — «Visual Basic». Далее, необходимо выбрать нужный нам лист и в его свойствах («Properties») найти свойство Visible и установить в «2 — xlSheetVeryHidden».
После этого лист станет «очень скрытым». Отменить свойство VeryHidden можно точно так же через режим разработчика, либо используя необходимый нам макрос, о котором я напишу чуть дальше.
Авторизация в Excel: группы доступа
После создания макета документа, нам необходимо разработать несколько групп доступа и распределить и ограничить для них права. Предположим, что таких групп будет три:
Авторизация в Excel: разработка макета формы
С этим пунктом не должно возникнуть никаких проблем. Элементов на форме авторизации должно быть не так уж и много:
Для тех, кто не знает, как создавать формы в VBA: нужно зайти в меню «Разработчик» — «Visual Basic», нажать правой кнопкой по нашему проекту (VBAProject Название_Файла.xlsx), затем Insert — UserForm. Создается форма с названием UserForm1, на которой мы и будем размещать все наши объекты с помощью меню «ToolBox».
Если быстро набросать элементы, которые мы перечислили, должно получиться что-то вроде этого:
После добавления элементов, поменял их стандартные названия:
«UserForm1» переименовал в «Authorization».
«TextBox1» переименовал в «TextBox_Login».
«TextBox2» переименовал в «TextBox_Pass».
Также, в свойствах «TextBox_Pass», мы находим свойство «PasswordChar» и вводим любой символ, который мы хотим видеть вместо вводимых символов пароля — чаще всего используется символ «*».
Ничего лишнего, пока что все просто. Переходим далее.
Подготовка служебного листа
В моем примере, служебный лист будет содержать список логинов, паролей, а также соответствующую логину группу доступа. Чтобы немного «усложнить» потенциальный взлом (хотя надо понимать, что взломать Excel продвинутому пользователю не составит никакого труда), пароли на листе мы будем хранить в захешированном виде. Подробнее о хешировании можно прочитать на Википедии, но в вкратце — это преобразование данных в строку фиксированной длины, состоящей из цифр и букв с помощью определенных математических алгоритмов. О том, как мы будем хешировать пароли в Excel, я расскажу далее.
Итак, для начала, содержимое служебного листа будет выглядеть вот так:
Авторизация в Excel: особенности и написание программного кода на VBA
Данные пункты тесно взаимосвязаны между собой, поэтому я их объединил в один большой. Здесь мы будем писать программный код для всего нашего файла: как для формы, так и для некоторых событий.
Для начала, мы напишем код, который будет отображать различные листы в зависимости от роли пользователя после авторизации. Макрос user_group мы делаем приватным и вписывать его будем не в отдельный модуль, а в нашу готовую форму Authorization. Аргументом для макроса является переменная X, которая будет содержать название группы доступа в виде текстовой строки String:
Хочу обратить внимание на то, что у нашего файла будет стоять «защита структуры книги» с паролем «112», т.е. пользователь не сможет создавать, удалять и переименовывать листы нашего документа. И, чтобы изменить видимость листов, необходимо сначала снять эту защиту программно, а затем, в зависимости от роли пользователя, поставить обратно, что мы и делаем в нашем коде.
Далее, код для кнопки «Авторизация». При нажатии на данную кнопку, запускается несколько проверок:
В макросе CommandButton1_Click используется функция GetHash (строка 15), которая преобразует входящие данные в хеш. Данная функция взята с сайта ExcelVba.ru, за что выражаю им огромную благодарность. Код необходимо вставить в главный модуль книги:
Основной код написан, теперь переходим к более мелким.
Макрос, который запускает форму авторизации (можно установить на кнопку на главном листе «Main»):
Также, макрос можно использовать при событии «Open» — при открытии книги:
Стоит отметить, что у большинства пользователей запуск макросов по умолчанию отключен, именно поэтому на главном листе Main необходимо сделать что-то вроде «памятки» со справочной информацией о том, как активировать работу макросов.
Макрос для закрытия книги.
При закрытии книги, нам нужно снять защиту со структуры книги, затем скрыть все листы (кроме листа «Main»), а затем снова вернуть защиту структуры книги с паролем «112» (можно установить на какую-либо кнопку):
Да, данный макрос можно использовать при событии «BeforeClose» — перед закрытием книги. Однако, может возникнуть несколько проблем:
Поэтому, чтобы избежать такой ситуации, я хочу предложить более радикальный, менее удобный вариант, который, однако, сведет вышеперечисленные потенциальные проблемы к минимуму: помимо выполнения макроса close_book перед каждым закрытием книги с помощью события «BeforeClose» (как на первом проблемном варианте), мы будем выполнять его и перед каждым ручным сохранением файла с помощью события BeforeSave:
Осталось только сделать памятку по включению макросов на главном листе документа, а также выполнить важный шаг, без которого все наши проделанные действия не имеют смысла — поставить пароль на проект VBA: Меню «Разработчик» — «Visual Basic» — «Tools» — «VBAProject — Project Properties» — Вкладка «Protection» — поставить галочку «Lock project for viewing» и ввести пароль и нажать «Ок».
Сохраняем файл в формате «.xlsb» или «.xlsm» и все, наша «Авторизация на VBA» готова. Помимо этого, можно защитить проект еще сильнее — о способах защиты написано моей отдельной статье.
Также, по желанию, мы можем сделать отдельную форму для администраторов, для добавления новых пользователей на лист «Settings», либо форму для восстановления пароля по какому-либо ключевому слову, но в данном примере такие функции мы реализовывать не будем.
Авторизация в Access при входе в свою учетную запись на ПК + пароль
Вложения
авторизация.rar (43.1 Кб, 28 просмотров) |
Установил пароль на учетную запись Windows при входе, но он перестал его требовать
Добрый день. Неделю назад купили новый комп, установили на него Винду 7 максималку (64 бит) и на.
Завершение работы при входе в учетную запись
Доброго времени всем.Нужна помощь-при входе обычной уч.записи идет ДОБРО ПОЖАЛОВАТЬ;затем.
Не могу удалить свою учетную запись. Пункта «переключиться на локальную учетную запись» нет
Добрый день! На свое рабочем компьютере мне нужно было загрузить приложение из маркета, и для этого.
BSOD 3B (smtxhci.sys) при входе в учетную запись Skype
Здравствуйте, уважаемые. Столкнулся с такой проблемой, что при входе в учетную запись skype
не знаю зачем здесь так много букв, достаточно
Вложения
авторизация 2 вариант.rar (34.6 Кб, 22 просмотров) |
. перефразируйте пожалуйста свой вопрос, с уточнением, что и где подправить.
нужно создать форму регистрации, если не хотите сами регистрировать пользователей, с обязательной проверкой на совпадение имени пользователя.
Создать группы «пользователь» и «админ» при вводе логина проверяется к какой группе относиться пользователь и открывает нужную форму.
Но в MS access редко кто такое делает, сложно и не эффективно.
Добавлено через 2 минуты
Spec_0994, я давно делал вход для пользователей («Username»), вставлял его в запрос, он считывал имя пользователя windows (не должны повторятся, лучше использовать сервис AD в сети) и открывал нужные данные (отсортировывал)
Да нет вы что, я даже об этом и не думал.
Извиняюсь, что не так выразился, переформулирую:
Archie Goodwin
Авторизация
Рубрики блога
Рекомендуем
Последние комментарии
Облако тегов
Устами великих
Реклама
Форма входа (MS Access)
Суть в том, что бы создать форму выскакивающую при входе, в которой бы были поле выпадающего списка для выбора сотрудника, поле для ввода пароля и соответственно кнопка «ОК». Но это не просто форма для безопасности. Еще должна быть привязка к должности пользователя. Так, после подтверждения правильности ввода данных, должна открываться форма со множеством подчиненных форм и кнопок на отчеты и запросы, при чем эта форма должна быть разной для каждой должности. Таким образом, получается что будет создан пользовательский интерфейс при этом не закрывая, так сказать, исходный код, но по большому счету, любому пользователю будет незачем просматривать все отчеты, фомы и запросы базы в поисках непонятно чего, так как у него все будет нужно у него перед глазами.
Самое первое что нужно, так это таблица с сотрудниками (или пользователями) со столбцами где указаны их имя, должность и пароль.
Потом создаем новую форму с помощью конструктора. Внешне можно настраивать как угодно, но обязательно должно быть поле с выпадающим списком, текстовое поле для ввода пароля и кнопка подтверждения. Вот что получилось у меня
Чтобы форма открывалась сразу же при запуске базы данных, необходимо
Соответственно для поля выпадающего списка нужно сделать привязку «источника строк» к полям таблицы «Персонал» (ну или пользователи) и выбрать такие поля как ID (уникальный номер для каждого сотрудника), Имя (в нашем случае поле называется ФИО) и Должность
При желании можно также выставить сортировку по интересующему полю, либо по ID, тогда пользователи будут отображаться по мере поступления на работу, можно по Имени, а можно сделать сортировку по должностям.
Далее выделяем кнопку «ОК» в конструкторе и ищем поле в событиях «Нажатие кнопки», выбирая [Процедура обработки событий] переходим в Visual Basic и прописываем следующий сценарий для кнопки, который будет работать по клику:
PS код уже с комментариями относительно его содержания
Собственно как бы все, задумка реализована. Теперь чтобы создать действительно пользовательский интерфейс нужно создать актуальные и необходимые формы для каждой должности и вставить в необходимую часть кода указанного выше.
Проблемная строка:
.FindFirst («ID=» & Me.cboCurrentEmployee.Value)
в 5 строке добавляем dbOpenDynaSet
О сайте
Правда, помимо общих тематик, которые есть почти на каждом личном блоге, стоит выделить специализированные рубрики блога, которые будут полезны и интересны вебмастерам, программистам, дизайнерам, офисным работникам и пользователям ПК, желающим повысить свои навыки и уровень знаний. Подробнее о спецрубриках
Записки вебмастера – рубрика, которая призвана собрать коллекцию полезных скриптов и авторских решений, интересных особенностей и стандартов верстки, решение вопросов юзабилити и функционала, полезных ресурсов и программ.
Вопрос дизайна – это актуальные тренды, пошаговые и видео-уроки в фотошопе, необходимые плагины для фоторедакторов, векторные и PSD исходники, PNG иконки и GIF анимации, кириллические шрифты с засечками и без засечек, заливки (паттерны) и градиенты.
Мой ПК – каждая статья в этой рубрике направлена на то, чтобы узнать свой компьютер лучше. Здесь можно будет почитать о системных процессах и редактировании системного реестра, о способах защитить личные данные и компьютер в целом, о настройке локальной сети и подключениях к сети интернет, обзор ряда программ, которые делают работу за компьютером удобнее, быстрее и приятнее.
Прочие офисные программы – рубрика о программах для ведения учета (конфигурации, платформы, внешние отчеты для 1C), сдачи отчетности (MeDoc, БестЗвіт) и статистического анализа данных (SPSS), также здесь можно найти обзоры программного обеспечения для работы с периферийными устройствами. Свернуть
Авторизация на основе пользователей (VB)
В этом учебнике мы рассмотрим ограничение доступа к страницам и ограничение функциональных возможностей на уровне страниц с помощью различных методов.
Введение
Большинство веб-приложений, предлагающих учетные записи пользователей, делают это в части, чтобы предоставить определенным посетителям доступ к определенным страницам в пределах сайта. В большинстве сетевых мессажебоард сайтов, например, все пользователи — анонимные и аутентифицированные, могут просматривать записи мессажебоард, но только пользователи, прошедшие проверку подлинности, могут посетить веб-страницу, чтобы создать новую запись. И могут существовать административные страницы, доступные только определенному пользователю (или определенному набору пользователей). Более того, функции на уровне страницы могут различаться для каждого пользователя. При просмотре списка записей прошедшие проверку пользователи показывают интерфейс для оценки каждой записи, в то время как этот интерфейс недоступен для анонимных посетителей.
ASP.NET позволяет легко определять правила авторизации на основе пользователей. С небольшой разметкой в Web.config можно заблокировать определенные веб-страницы или целые каталоги, чтобы они были доступны только определенному подмножеству пользователей. Функции на уровне страницы можно включать или отключать в зависимости от текущего пользователя с помощью программных и декларативных средств.
В этом учебнике мы рассмотрим ограничение доступа к страницам и ограничение функциональных возможностей на уровне страниц с помощью различных методов. Приступим.
Обзор рабочего процесса авторизации URL-адреса
Как обсуждалось в обзоре учебника по проверке подлинности с помощью форм, когда среда выполнения ASP.NET обрабатывает запрос ресурса ASP.NET, запрос вызывает ряд событий в течение жизненного цикла. HTTP-модули — это управляемые классы, код которых выполняется в ответ на определенное событие в жизненном цикле запроса. ASP.NET поставляется с несколькими HTTP-модулями, которые выполняют базовые задачи в фоновом режиме.
Рис. 1. Рабочий процесс проверки подлинности с помощью форм и URL-адресов (щелкните, чтобы просмотреть изображение с полным размером)
На рис. 1 показано взаимодействие, возникающее, когда анонимный посетитель пытается получить доступ к ресурсу, который недоступен для анонимных пользователей. В этом случае анонимный посетитель перенаправляется на страницу входа с помощью страницы, которую пытался посетить, указанную в строке запроса. После успешного входа пользователь будет автоматически перенаправлен к ресурсу, который изначально пытался просмотреть.
Если несанкционированный запрос выполняется анонимным пользователем, этот рабочий процесс является простым и легко понять, что произошло и почему. Но помните, что FormsAuthenticationModule перенаправит всех неавторизованных пользователей на страницу входа, даже если запрос выполнен пользователем, прошедшим проверку подлинности. Это может привести к путанице в работе пользователя, если прошедший проверку подлинности пользователь пытается посетить страницу, для которой она не имеет полномочий.
На рис. 2 показан этот непонятный рабочий процесс.
Рис. 2. Рабочий процесс по умолчанию может привести к путанице в цикле (щелкните, чтобы просмотреть изображение с полным размером)
Рабочий процесс, проиллюстрированный на рис. 2, может быстро бефуддле даже самых самых компьютерных посетителей. Мы рассмотрим способы предотвращения этого цикла в шаге 2.
Область авторизации URL-адресов
Однако IIS 7 позволяет выполнять интегрированные конвейеры IIS и ASP.NET. С помощью нескольких параметров конфигурации можно настроить IIS 7 для вызова UrlAuthorizationModule для всех запросов. Это означает, что правила авторизации URL-адресов могут быть определены для файлов любого типа. Кроме того, IIS 7 включает собственный механизм авторизации URL-адресов. Дополнительные сведения об интеграции ASP.NET и собственной функции авторизации URL-адресов в IIS 7 см. в разделе Общие сведения об авторизации URL-адресов IIS7. Чтобы получить более подробные сведения об интеграции ASP.NET и IIS 7, изучите копию книги Шахрам Кхосрави, профессиональный набор средств IIS 7 и ASP.NET для интегрированного программирования (ISBN: 978-0470152539).
В двух словах, в версиях до IIS 7 правила авторизации URL-адресов применяются только к ресурсам, обрабатываемым средой выполнения ASP.NET. Но в IIS 7 можно использовать собственную функцию авторизации URL-адресов IIS или интегрировать технологию ASP. UrlAuthorizationModule NET в конвейер HTTP IIS, тем самым расширяя эту функциональность на все запросы.
Шаг 1. Определение правил авторизации URL-адресов в Web.config
UrlAuthorizationModule определяет, следует ли предоставлять или запрещать доступ к запрошенному ресурсу для определенного удостоверения на основе правил авторизации URL-адреса, определенных в конфигурации приложения. Правила авторизации написаны в элементе в форме и дочерних элементов. Каждый дочерний элемент и может указывать:
В следующей разметке показано, как использовать правила авторизации URL-адресов, чтобы разрешить пользователям Тито и Скотт и запретить все остальные:
Следующий параметр предоставляет доступ любому пользователю, кроме SAM (включая анонимных посетителей):
Чтобы разрешить только пользователей, прошедших проверку подлинности, используйте следующую конфигурацию, которая запрещает доступ всем анонимным пользователям:
Правила авторизации определяются в элементе в Web.config и применяются ко всем ASP.NET ресурсам в веб-приложении. Зачастую приложение имеет разные правила авторизации для различных разделов. Например, на сайте электронной коммерции все посетители могут заменять продукты, просматривать Обзор продукта, искать в каталоге и т. д. Однако только пользователи, прошедшие проверку подлинности, могут получить доступ к извлечению или страницам для управления журналом доставки. Кроме того, могут существовать части сайта, доступные только по выбранным пользователям, например администраторам сайта.
ASP.NET позволяет легко определить различные правила авторизации для различных файлов и папок на сайте. Правила авторизации, указанные в файле Web.config корневой папки, применяются ко всем ресурсам ASP.NET на сайте. Однако эти параметры авторизации по умолчанию можно переопределить для конкретной папки, добавив Web.config с ным разделом.
Рис. 3. добавление файла Web.config в папку Membership (щелкните, чтобы просмотреть изображение с полным размером)
Рис. 4. Теперь приложение должно содержать два Web.config файлов (щелкните, чтобы просмотреть изображение с полным размером)
Чтобы протестировать это изменение, перейдите на домашнюю страницу в браузере и убедитесь, что вы вышли из нее. Поскольку поведение приложения ASP.NET по умолчанию — разрешить всем посетителям, а так как мы не сделали изменений авторизации в файле Web.config корневого каталога, мы можем посетить файлы в корневом каталоге как анонимного посетителя.
Щелкните ссылку Создание учетных записей пользователей, найденную в левом столбце. Вы перейдете к
Рис. 5. Поскольку правила авторизации URL-адреса запрещают анонимный доступ, мы будем перенаправлены на страницу входа (щелкните, чтобы просмотреть изображение с полным размером).
Применение правил авторизации URL-адресов к определенному расположению
Рассмотрим, как UrlAuthorizationModule использует правила авторизации для предоставления или запрета доступа
Поскольку UrlAuthorizationModule обрабатывает правила авторизации сверху вниз, прекращая при любом совпадении, важно иметь более конкретные правила перед менее конкретными. Это значит, что для определения правил авторизации, запрещающих Цзисунь и анонимных пользователей, но разрешающих всех других пользователей, прошедших проверку подлинности, следует начинать с наиболее конкретного правила, которое влияет на Цзисунь, а затем перейти к менее конкретным правилам, которые позволяют использовать все остальные Пользователи, прошедшие проверку подлинности, но отклоняющие анонимных пользователей. Следующие правила авторизации URL-адресов реализуют эту политику, сначала запрещая Цзисунь, а затем запрещает анонимных пользователей. Любому пользователю, прошедшему проверку подлинности, отличному от Цзисунь, будет предоставлен доступ, поскольку ни одна из этих инструкций не будет совпадать.
Шаг 2. Исправление рабочего процесса для неавторизованных пользователей, прошедших проверку подлинности
Как мы обсуждали ранее в этом учебнике, в разделе о рабочем процессе авторизации URL-адреса в любое время, когда происходит несанкционированный запрос, UrlAuthorizationModule прерывает запрос и возвращает ошибку HTTP 401 с несанкционированным состоянием. Это состояние 401 изменяется FormsAuthenticationModule в состояние перенаправления 302, которое отправляет пользователя на страницу входа. Этот рабочий процесс выполняется при любом неавторизованном запросе, даже если пользователь прошел проверку подлинности.
Возврат пользователя, прошедшего проверку подлинности на страницу входа, скорее всего, приведет к их путанице, так как они уже входили в систему. С небольшой скоростью работы мы можем улучшить этот рабочий процесс путем перенаправления пользователей, прошедших проверку подлинности, которые делают несанкционированные запросы к странице, объясняющей, что они попытались получить доступ к ограниченной странице.
Для этого добавьте следующий код в обработчик событий Page_Load на странице входа:
Рис. 6. Проверка подлинности неавторизованных пользователей перенаправляется на UnauthorizedAccess.aspx (щелкните, чтобы просмотреть изображение с полным размером)
Этот настраиваемый рабочий процесс обеспечивает более разумное и простое взаимодействие с пользователем за счет короткого цикла, показанного на рис. 2.
Шаг 3. ограничение функциональных возможностей на основе текущего пользователя
Авторизация URL-адресов упрощает задание правил грубой авторизации. Как было показано на шаге 1, с авторизацией URL-адресов мы можем кратко указать, какие удостоверения разрешены и какие из них запрещают просматривать определенную страницу или все страницы в папке. Однако в некоторых случаях может потребоваться разрешить всем пользователям посещать страницу, но ограничить функциональность страницы в зависимости от того, кто ее посещает.
Рассмотрим вариант веб-сайта электронной коммерции, который позволяет посетителям, прошедшим проверку подлинности, просматривать свои продукты. Когда анонимный пользователь посещает страницу продукта, он увидит только сведения о продукте, и ему не будет предоставлена возможность покинуть проверку. Однако прошедший проверку подлинности пользователь, просматривающий ту же страницу, увидит интерфейс рецензирования. Если прошедший проверку подлинности пользователь еще не проверил этот продукт, интерфейс позволит ему отправить отзыв. в противном случае они покажут их ранее отправленный отзыв. Чтобы выполнить этот сценарий дальше, на странице продукта могут отображаться дополнительные сведения и предлагаются расширенные функции для пользователей, работающих с компанией электронной коммерции. Например, страница продукта может содержать список запасов на складе и параметры для изменения цены и описания продукта при посещении сотрудником.
Такие подробные правила авторизации можно реализовать декларативно или программно (или с помощью какого-либо сочетания этих двух параметров). В следующем разделе мы рассмотрим, как реализовать детализированную авторизацию с помощью элемента управления LoginView. После этого будут рассмотрены программные методы. Прежде чем можно будет рассмотреть применение правил авторизации точной детализации, сначала необходимо создать страницу, функциональность которой зависит от пользователя, который его посещает.
Давайте создадим страницу, в которой перечислены файлы в определенном каталоге в элементе управления GridView. Вместе с перечнем имени, размера и других данных каждого файла GridView будет содержать два столбца элементов управления LinkButton: одно с именем и одно с названием удалить. Если выбрано представление LinkButton, будет отображено содержимое выбранного файла. Если щелкнуть элемент LinkButton DELETE, файл будет удален. Сначала создадим эту страницу, чтобы ее функции просмотра и удаления были доступны всем пользователям. В разделах Использование элемента управления LoginView и программное ограничение функциональных возможностей мы поможем увидеть, как включить или отключить эти функции в зависимости от пользователя, который посещает страницу.
После создания разметки GridView мы готовы написать код, который будет получать файлы в определенном каталоге и привязывать их к GridView. Добавьте следующий код в обработчик событий Page_Load страницы:
Уделите немного времени, чтобы перейти на эту страницу через браузер. Отобразится список файлов, находящихся в корневом каталоге приложения. Если щелкнуть любое представление или удалить LinkButton, обратная передача будет выполняться, но никакие действия не будут выполнены, так как мы еще создали обработчики необходимых событий.
Рис. 7. в элементе управления GridView перечислены файлы в корневом каталоге веб-приложения (щелкните, чтобы просмотреть изображение с полным размером)
Для вывода содержимого выбранного файла необходимо иметь средства. Вернитесь в Visual Studio и добавьте текстовое поле с именем FileContents над GridView. Задайте для свойства TextMode значение MultiLine и его свойства Columns и Rows равными 95% и 10 соответственно.
Затем создайте обработчик событий для события SelectedIndexChanged GridView и добавьте следующий код:
Рис. 8. содержимое выбранного файла отображается в текстовом поле (щелкните, чтобы просмотреть изображение с полным размером)
Наконец, добавьте обработчик событий со следующим кодом для события RowDeleting GridView:
Код просто отображает полное имя файла для удаления в текстовом поле FileContents без фактического удаления файла.
Рис. 9. при нажатии кнопки удалить файл фактически не удаляется (щелкните, чтобы просмотреть изображение с полным размером)
В настоящее время любой прошедший проверку подлинности или анонимный пользователь может посетить страницу UserBasedAuthorization.aspx и просмотреть или удалить файлы. Сделаем это, чтобы только пользователи, прошедшие проверку подлинности, могли просматривать содержимое файла, и только Тито может удалить файл. Такие детализированные правила авторизации можно применять декларативно, программно или с помощью сочетания обоих методов. Рассмотрим декларативный подход к ограничению того, кто может просматривать содержимое файла. Мы будем использовать программный подход к ограничению того, кто может удалять файл.
Использование элемента управления LoginView
Как мы видели в прошлых учебных курсах, элемент управления LoginView полезен для отображения различных интерфейсов для проверенных и анонимных пользователей, а также предоставляет простой способ скрытия функциональных возможностей, недоступных анонимным пользователям. Так как анонимные пользователи не могут просматривать или удалять файлы, необходимо отображать текстовое поле FileContents только при посещении страницы пользователем, прошедшим проверку подлинности. Чтобы добиться этого, добавьте на страницу элемент управления LoginView, присвойте ему имя LoginViewForFileContentsTextBox и переместите декларативную разметку FileContents текстового поля в LoggedInTemplate элемента управления LoginView.
Веб-элементы управления в шаблонах LoginView больше не доступны непосредственно из класса кода программной части. Например, FilesGrid обработчики событий SelectedIndexChanged и RowDeleting GridView в настоящее время ссылаются на элемент управления TextBox FileContents с помощью следующего кода:
После перемещения текстового поля в LoggedInTemplate LoginView и обновления кода страницы для ссылки на текстовое поле с помощью шаблона FindControl(«controlId») посетите страницу как анонимного пользователя. Как показано на рис. 10, текстовое поле FileContents не отображается. Однако представление LinkButton по-прежнему отображается.
Рис. 10. элемент управления LoginView визуализирует только FileContents текстовое поле для пользователей, прошедших проверку подлинности (щелкните, чтобы просмотреть изображение с полным размером)
Одним из способов скрытия кнопки просмотра для анонимных пользователей является преобразование поля GridView в TemplateField. При этом будет создан шаблон, содержащий декларативную разметку для представления LinkButton. Затем можно добавить элемент управления LoginView в TemplateField и поместить LinkButton в LoggedInTemplate LoginView, тем самым скрывая кнопку просмотра от анонимных посетителей. Для этого щелкните ссылку Edit Columns (изменить столбцы) в смарт-теге GridView, чтобы открыть диалоговое окно «поля». Затем нажмите кнопку выбрать в списке в левом нижнем углу, а затем щелкните преобразовать это поле в ссылку TemplateField. Это приведет к изменению декларативной разметки поля из:
На этом этапе мы можем добавить LoginView в TemplateField. Следующая разметка отображает представление LinkButton только для пользователей, прошедших проверку подлинности.
Как показано на рис. 11, конечный результат не так прост, как столбец View по-прежнему отображается, даже если представление LinkButton в столбце скрыто. Мы рассмотрим, как скрыть весь столбец GridView (а не только LinkButton) в следующем разделе.
Рис. 11. элемент управления LoginView скрывает представление LinkButton для анонимных посетителей (щелкните, чтобы просмотреть изображение с полным размером).
Программное ограничение функциональности
В некоторых обстоятельствах декларативные методы недостаточно для ограничения функциональности страницы. Например, доступность определенных функций страницы может зависеть от критериев, которые выходят за рамки того, является ли пользователь веб-страницы анонимным или прошедшим проверку подлинности. В таких случаях различные элементы пользовательского интерфейса могут отображаться или скрываться с помощью программных средств.
Чтобы программно ограничить функциональные возможности, необходимо выполнить две задачи:
Чтобы продемонстрировать применение этих двух задач, давайте разрешите Тито только удалять файлы из GridView. Нашей первой задачей является определение того, Тито ли она посещение страницы. После определения необходимо скрыть (или показать) столбец удаления GridView. Столбцы GridView доступны через свойство Columns ; столбец отображается только в том случае, если его свойство Visible имеет значение True (по умолчанию).
Добавьте следующий код в обработчик событий Page_Load перед привязкой данных к GridView:
Рис. 12. столбец удаления не отображается при посещении другим пользователем, отличным от Тито (например, Брюс) (щелкните, чтобы просмотреть изображение с полным размером)
Шаг 4. применение правил авторизации к классам и методам
На шаге 3 анонимным пользователям запрещено просматривать содержимое файла и запрещать всем пользователям, кроме Тито, удалять файлы. Это было сделано путем скрытия связанных элементов пользовательского интерфейса для неавторизованных посетителей с помощью декларативных и программных методов. Для нашего простого примера правильное скрытие элементов пользовательского интерфейса было непросто, но как насчет более сложных сайтов, где может быть несколько различных способов выполнения одних и тех же функций? При ограничении этой функциональности неавторизованными пользователями, что происходит, если мы забыли скрыть или отключить все применимые элементы пользовательского интерфейса?
Давайте покажем, как использовать атрибут PrincipalPermission в обработчиках событий SelectedIndexChanged и RowDeleting GridView, чтобы запретить выполнение анонимных пользователей и пользователей, кроме Тито, соответственно. Все, что нам нужно сделать, — это добавить соответствующий атрибут в вершине каждого определения функции:
Атрибут обработчика событий SelectedIndexChanged указывает, что только пользователи, прошедшие проверку подлинности, могут выполнять обработчик событий, когда атрибут в обработчике событий RowDeleting ограничивает выполнение Тито.
Атрибут может применяться к классу, методу, свойству или событию. При добавлении атрибута он должен быть частью инструкции объявления класса, метода, свойства или события. Поскольку Visual Basic использует разрывы строк в качестве разделителей инструкций, атрибуты должны располагаться в той же строке, что и объявление, или непосредственно над ним с помощью символа продолжения строки (символ подчеркивания). В приведенном выше фрагменте кода символ продолжения строки используется для размещения атрибута в одной строке и объявления метода в другом.
Рис. 14. Если контекст безопасности не имеет прав для выполнения метода, выдается SecurityException (щелкните, чтобы просмотреть изображение с полным размером)
Помимо страниц ASP.NET, многие приложения также имеют архитектуру, включающую различные уровни, такие как бизнес-логика и уровни доступа к данным. Эти уровни обычно реализуются как библиотеки классов и предлагают классы и методы для выполнения бизнес-логики и функций, связанных с данными. Атрибут PrincipalPermission полезен для применения правил авторизации к этим слоям.
Сводка
В этом учебнике мы рассмотрели, как применять правила авторизации на основе пользователей. Мы начали с взглянуть на ASP. Инфраструктура авторизации URL-адресов NET. В каждом запросе UrlAuthorizationModule обработчика ASP.NET проверяет правила авторизации URL-адресов, определенные в конфигурации приложения, чтобы определить, авторизован ли идентификатор для доступа к запрошенному ресурсу. Коротко говоря, авторизация URL-адресов позволяет легко указывать правила авторизации для конкретной страницы или для всех страниц в определенном каталоге.
Платформа авторизации URL-адресов применяет правила авторизации отдельно для каждой страницы. При использовании авторизации URL-адреса запрашивающее удостоверение авторизовано для доступа к определенному ресурсу. Однако многие сценарии вызывают более детализированные правила авторизации. Вместо того, чтобы определять, кому разрешен доступ к странице, может потребоваться предоставить всем доступ к странице, но для отображения различных данных или предоставления различных функциональных возможностей в зависимости от пользователя, который посещает страницу. Авторизация на уровне страницы обычно включает скрытие конкретных элементов пользовательского интерфейса, чтобы предотвратить доступ неавторизованных пользователей к запрещенным функциям. Кроме того, можно использовать атрибуты для ограничения доступа к классам и выполнения его методов для определенных пользователей.
Поздравляем с программированием!
Дополнительные материалы
Дополнительные сведения о разделах, обсуждаемых в этом руководстве, см. в следующих ресурсах: