4. Zintegrowane mechanizmy bezpieczeństwa ASP.NET

Podobne dokumenty
Kontrola dostępu w ASP.NET

5. Tworzenie prostego kalkulatora

Podstawy technologii WWW

Przed rozpoczęciem pracy otwórz nowy plik (Ctrl +N) wykorzystując szablon acadiso.dwt

Danuta ROZPŁOCH-NOWAKOWSKA Strona Moduł 4. Przykład 1. Przykład 2. HTML 4.01 Transitional).

za pomocą: definiujemy:

Budowa aplikacji ASP.NET współpracującej z bazą dany do obsługi przesyłania wiadomości

Zaawansowane aplikacje internetowe - laboratorium

Budowa aplikacji ASP.NET współpracującej z bazą dany do przeprowadzania ankiet internetowych

Budowa aplikacji ASP.NET współpracującej z bazą dany do przeprowadzania ankiet internetowych

Programowanie komponentowe. Przykład 1 Bezpieczeństwo wg The Java EE 5 Tutorial Autor: Zofia Kruczkiewicz

CMS Admin instrukcja administratora

e-wsparcie Barbara Muszko Aktualizacja Twojej witryny internetowej tak prosta, jak obsługa Worda

Gdy z poziomu programu Delphi otworzysz folder pierwszy program, zauważysz tylko dwa pliki [rys.1]:

2. Podstawy narzędzia Application Builder, budowa strony, kreatory aplikacji

Zasady tworzenia podstron

Budowa aplikacji ASP.NET współpracującej z bazą dany do obsługi przesyłania wiadomości

Zadanie 9. Projektowanie stron dokumentu

2. Podstawy narzędzia Application Builder, budowa strony, kreatory aplikacji

Microsoft.NET: LINQ to SQL, ASP.NET AJAX

Nawigacja po długim dokumencie może być męcząca, dlatego warto poznać następujące skróty klawiszowe

Szkolenie dla nauczycieli SP10 w DG Operacje na plikach i folderach, obsługa edytora tekstu ABC. komputera dla nauczyciela. Materiały pomocnicze

Pierwsza strona internetowa

Temat: Organizacja skoroszytów i arkuszy

SPIS TREŚCI. Sposób pierwszy... 3 Sposób drugi Ikony banków Ikony dostawców Strona1

plansoft.org Zmiany w Plansoft.org

Aplikacja Shoper Appstore Powiązane w koszyku REALIZACJA

Widżety KIWIPortal. tworzenie umieszczanie na stronach internetowych opcje zaawansowane. Autor: Damian Rebuś Data: Wersja: 1.

Zadanie 10. Stosowanie dokumentu głównego do organizowania dużych projektów

Wykład 3 Inżynieria oprogramowania. Przykład 1 Bezpieczeństwo(2) wg The Java EE 5 Tutorial Autor: Zofia Kruczkiewicz

I. Program II. Opis głównych funkcji programu... 19

Budowa aplikacji ASP.NET współpracującej z bazą danych do obsługi przesyłania wiadomości

6. Formularze tabelaryczne, obiekty nawigacji - rozgałęzienia

Budowa aplikacji ASP.NET współpracującej z bazą dany do obsługi przesyłania wiadomości

Nowy szablon stron pracowników ZUT

Backend Administratora

I. Informacje ogólne. Jednym z takich systemów jest Mambo.

11. Autoryzacja użytkowników

SZYBKI START. Tworzenie nowego połączenia w celu zaszyfrowania/odszyfrowania danych lub tekstu 2. Szyfrowanie/odszyfrowanie danych 4

Moje Projekty. Wprowadzenie HTML & CSS

Instrukcja obsługi funkcji specjalnych szablonu C01 v.1.0

Kadry Optivum, Płace Optivum. Jak przenieść dane na nowy komputer?

Tomasz Grześ. Systemy zarządzania treścią, cz. II

Kancelaria Prawna.WEB - POMOC

CMS - INFORMACJE. *** Mirosław Kuduk E mail: tel. kom DODATKOWE FUNKCJE - PANEL ADMINISTRATORA

Płace Optivum. 1. Zainstalować serwer SQL (Microsoft SQL Server 2008 R2) oraz program Płace Optivum.

Instrukcja modułu BKD - Wykonawca

Kadry Optivum, Płace Optivum. Jak przenieść dane na nowy komputer?

Miejskie Wodociągi i Oczyszczalnia sp. z o.o. w Grudziądzu. ibok. Internetowe Biuro Obsługi Klienta. Instrukcja obsługi

Układy witryn internetowych

Aplikacje www laboratorium

Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf. Materiały poprawione

Aplikacja Dodatkowe zakładki Shoper Appstore REALIZACJA

Zadanie1: Odszukaj w serwisie internetowym Wikipedii informacje na temat protokołu http.

Program powinien otworzyć się z pierwszym formularzem. Jeśli nie, otwórz pierwszy formularz, wybierając go z listy - Shift+F12.

Zadanie 11. Przygotowanie publikacji do wydrukowania

Zadanie 1. Stosowanie stylów

Budowa aplikacji ASP.NET współpracującej z bazą danych do obsługi przesyłania wiadomości

Platforma e-learningowa

5.4. Tworzymy formularze

Aplikacje internetowe

Ćwiczenie 8. Kontrolki serwerowe

MySource Matrix CMS. Prosty Interfejs Użytkownika INSTRUKCJA wersja 1.3 POLAND AUSTRALIA UNITED KINGDOM NEW ZEALAND UNITED STATES

Jak używać funkcji prostego udostępniania plików do udostępniania plików w systemie Windows XP

WYPOŻYCZALNIA BY CTI INSTRUKCJA

CMS- kontakty (mapa)

4. Zabezpieczanie aplikacji przez logowanie

Zadanie 1. Tworzenie nowej "strony sieci WEB". Będziemy korzystad ze stron w technologii ASP.NET.

WYDAWANIE CZYTNIKAMI BY CTI Instrukcja

Kancelaria rozpoczęcie pracy z programem

VinCent Administrator

Bazy danych Karta pracy 1

netster instrukcja obsługi

Laboratorium - Archiwizacja i odzyskiwanie danych w Windows Vista

4. Proste przekazywanie stanu

Instrukcja użytkownika

1. LOGOWANIE DO SYSTEMU

Pracownia internetowa w każdej szkole (edycja Jesień 2007)

1. Przypisy, indeks i spisy.

Dokumentacja WebMaster ver 1.0

Platforma e-learningowa

Konfiguracja oprogramowania w systemach MS Windows dla kont z ograniczonymi uprawnieniami

Spis treści. Rozdział 2. Graficzna oprawa witryny...z Stosowanie motywu...s...s.. 19

Skrócona instrukcja korzystania z Platformy Zdalnej Edukacji w Gliwickiej Wyższej Szkole Przedsiębiorczości

PROBLEMY TECHNICZNE. Co zrobić, gdy natrafię na problemy związane z użytkowaniem programu DYSONANS

UONET+ moduł Dziennik

Nowe funkcjonalności w wersji Automatyczne uzupełnianie zakładek w dokumentach WORD przy podpisywaniu

darmowe zdjęcia - allegro.pl

Pracownia internetowa w szkole ZASTOSOWANIA

Instrukcja Wykonawcy - Moduł Aukcji/Licytacji (bez podpisu elektronicznego)

Instrukcja korzystania z konsultacji online

OpenOfficePL. Zestaw szablonów magazynowych. Instrukcja obsługi

Laboratorium Systemów Operacyjnych

NetDrive czyli jak w prosty sposób zarządzać zawartością FTP

Lokalizacja jest to położenie geograficzne zajmowane przez aparat. Miejsce, w którym zainstalowane jest to urządzenie.

Z Małej Szkoły w Wielki Świat

Young Programmer: HTML+PHP. Dr inż. Małgorzata Janik, Zajęcia #2

Najważniejsze informacje dla klienta na temat Portalu Serwisowego D-Link Spis treści

5.3. Tabele. Tworzenie tabeli. Tworzenie tabeli z widoku projektu. Rozdział III Tworzenie i modyfikacja tabel

UWAGA: poniższe procedury przygotowane zostały w oparciu o program HiTi PhotoDesiree 2 w wersji

Transkrypt:

4. Zintegrowane mechanizmy bezpieczeństwa ASP.NET W ASP.NET zintegrowane mechanizmy bezpieczeństwa oparte są głównie (choć nie tylko) na plikach konfiguracyjnych web.config i machine.config. Ich pełny opis nie mieści się w ramach naszego kursu, choć w module 6 zostaną opisane najbardziej interesujące elementy z punktu widzenia konfiguracji i programowania aplikacji ASP.NET. Plik web.config jest plikiem typu XML, konfigurowanym (jak na razie) ręcznie przez programistę aplikacji. Plik ten składa się z wielu sekcji, odpowiedzialnych za poszczególne elementy konfiguracji aplikacji. Każda aplikacja ASP.NET jest w stanie odczytać i dostosować swoją pracę w zależności od wartości parametrów umieszczonych w pliku web.config. Sekcja <appsettings> pozwala na przechowywanie dowolnej liczby par kluczy i odpowiadającym im wartości, w celu ich późniejszego odczytania w pliku.aspx lub.cs, przy pomocy wywołania ConfigurationSettings.AppSettings["nazwaKlucza"] (przykład 9). W naszej aplikacji w tej sekcji umieszczona będzie pełna ścieżka do bazy danych wraz z nazwami odpowiednich parametrów określających rodzaj sterowników pozwalających na odczyt danych. Przykład 9. Wybrane sekcje w pliku web.config <?xml version="1.0" encoding="utf-8"?> <configuration> <!-- "ConfigurationSettings.AppSettings(key)" method: --> <appsettings> <add key="connectionstring" value="provider=microsoft.jet.oledb.4.0; Ole DB Services=-4; Data Source=C:\ASP.NET\MojBank\dane\bank.mdb"/> </appsettings>... Podsekcja <add> pozwala dodawać kolejne pary typu klucz wartość. Parametr key definiuje nazwę klucza (używanego później w kodzie aplikacji), a parametr value określa jego wartość. Wartości wszystkich parametrów tej podsekcji muszą być ujęte w nawiasy jest to wymóg XML. Sekcja <location> pozwala na określenie praw dostępu (autoryzacji) użytkowników aplikacji do wybranych plików i katalogów aplikacji na serwerze (przykład 10). Wynika to z tego, że nie wszyscy użytkownicy aplikacji musza mieć jednakowy dostęp do wszystkich zasobów. Zastosowanie wielu sekcji <location> 1

daje administratorowi aplikacji możliwość szybkiego i elastycznego określenia nie tylko pojedynczych użytkowników, ale całych ich grup w dostępie do zasobów serwera. Wewnątrz podsekcji <deny> podajemy nazwy użytkowników, którym zabroniony jest dostęp danego zasobu. Parametr users określa użytkowników aplikacji. Symbol gwiazdki (*) oznacza wszystkich użytkowników, a znak zapytania (?) użytkowników anonimowych, niezalogowanych. Zamiast users może również pojawić się parametr roles będzie on użyty w module 6. Przykład 10. Określenie dostępu do wybranych plików i katalogów aplikacji na serwerze w pliku web.config... <location path="header.txt"> <system.web> <authorization> <deny users="*" /> </authorization> </system.web> </location> <location path="footer.txt"> <system.web> <authorization> <deny users="*" /> </authorization> </system.web> </location> <location path="temp"> <system.web> <authorization> <deny users="*" /> </authorization> </system.web> </location> </configuration> Zapis <deny users="*" /> oznacza brak bezpośredniego dostępu do elementu o podanej ścieżce dla każdego użytkownika aplikacji. Jak widać, będą tak zabezpieczone pliki Header.txt, Footer.txt oraz katalog temp. 2

5. Interfejs witryny bankowej Spójny wygląd wszystkich stron składających się na witrynę internetową jest podstawą każdej udanej aplikacji. Sposobów na uzyskanie tego celu jest kilka i przyjrzymy się im już niebawem. Jednak podstawowym elementem jest zaprojektowanie ogólnego układu stron witryny. I od tego zaczniemy. 5.1. Tworzenie szablonu układu strony Aby ułatwić pracę i przyspieszyć tworzenie zamierzonego rozwiązania, bazowy szkielet strony został już przygotowany. Znajduje się on w katalogu MojBank, w materiałach na płycie. W katalogu ascx znajduje się kontrolka menu, która będzie później modyfikowana zależnie od roli zalogowanego użytkownika będzie ona dynamicznie wyświetlać tylko opcje dla niego dostępne. W katalogu style znajduje się plik bank.css, zawierający definicje arkusza stylów CSS (ang. Cascading Style Sheet). Będzie on użyty, aby w prosty sposób wzbogacić wygląd strony, równocześnie centralizując zmiany, np. jej kolorystyki. Katalog temp jest na razie pusty docelowo znajdą się tam pliki pomocnicze, które nie będą dostępne dla zwykłych użytkowników. Natomiast w katalogu głównym projektu znajduje się plik Layout.aspx. Jest to plik, który stanowi punkt wyjścia do stworzenia witryny bankowej. Przyjrzyjmy się zatem budowie strony z pliku Layout.aspx. Jest to tabela szeroka na całą stronę, w której umieszczone są główne komórki: nagłówek, menu nawigacyjne, treść strony, pomocniczy status, stopka. 3

Rysunek 2. Wygląd początkowy aplikacji Warto zauważyć, jakie rozwiązania są zastosowane w budowie tej strony. Przede wszystkim każda komórka ma określoną klasę (właściwość class komórek <TD>). Klasy te zdefiniowane są w arkuszu stylów bank.css. Włączając do strony arkusz stylów (o czym już niebawem) spowodujemy, że strona od razu nabierze rumieńców. Tabela główna ma szerokość (właściwość width) równą 100%, dzięki czemu dopasowuje się automatycznie do rozmiaru okna przeglądarki. Dodatkowo ma na razie włączoną ramkę (właściwość border równą 1), dzięki czemu w przeglądarce widać granice wszystkich komórek już niebawem się tego pozbędziemy! Komórka menu ma szerokość 200 punktów, podobnie zresztą jak główny panel kontrolki MenuBanku. Zauważ, że cały tekst kontrolki jest umieszczony na panelu o szerokości 200 punktów tak jak komórka menu w tabeli głównej oraz o wysokości 1 punktu. Dzięki temu kontrolka menu dopasowuje się do zawartości strony. Także sama konstrukcja kontrolki (cały tekst na panelu) zapewni możliwość dynamicznej zmiany jej zawartości. Natomiast główna komórka zawierająca treść strony ma szerokość wynoszącą 100%. Umożliwia to zachowanie stałej szerokości menu nawigacyjnego, niezależnie od rozmiaru okna przeglądarki. Komórka statusu zawiera etykietkę o nazwie Status. Kontrolka ta ma pustą właściwość Text oraz jest ukryta (jej właściwość Visible jest równa False). Etykietka ta służy do wyświetlania pomocniczych komunikatów, przydatnych na etapie tworzenia strony w skończonej aplikacji nie jest ona już potrzebna. Zaglądając na zakładkę All można zauważyć w drugiej linii pliku dyrektywę <%@ Register. Służy ona do włączenia do strony definicji kontrolki menu oraz podania nazwy znacznika, który będzie ją wywoływał. Istotną rzeczą jest tutaj zwrócenie uwagi na ścieżkę do kontrolki Menu.ascx, która zaczyna się od ukośnika (czyli katalogu głównego serwera). Jest ona konieczna, ponieważ w dalszym etapie prac będziemy tworzyć podkatalogi z kolejnymi stronami, a taka ścieżka do kontrolki menu zapewni nam zawsze dostęp do tej samej kontrolki. Innymi słowy, ścieżki takiej nie trzeba będzie zmieniać. Schematyczne przedstawienie zależności między plikami wykorzystywanymi na stronie Layout.aspx znajduje się poniżej: 4

bank.css arkusz stylów użycie przez <link> HTML Layout.aspx strona włączenie przez ASP.NET Menu.ascx kontrolka Rysunek 3. Zależności między plikami na stronie Layout.aspx 5.2. Budowa interfejsu użytkownika Najwyższa pora przystąpić do działań rozpoczniemy je od użycia i rozbudowy styli. W tym celu wykonaj poniższe czynności: 1. Załóż na dysku twardym własny katalog na pliki dla tego projektu. 2. Skopiuj do tego katalogu z załączonych materiałów zawartość katalogu MojBank, czyli następujące podkatalogi: ascx, style, temp oraz plik Layout.aspx. 3. Otwórz program WebMatrix. 4. Odszukaj i otwórz skopiowany plik Layout.aspx, możesz sprawdzić, czy strona działa poprawnie. 5. Przejdź do zakładki HTML i w sekcji <head> strony wpisz znacznik <link>, jak pokazano poniżej; zauważ, że ścieżka do pliku bank.css ponownie zaczyna się od ukośnika. Takiej ścieżki nie trzeba będzie zmieniać w stronach umieszczonych w podkatalogach. Przykład 11. Włączenie do strony kaskadowego arkusza stylów (CSS) <html> 5

<head> </head> <link href="/style/bank.css" type="text/css" rel="stylesheet" /> 6. Zaznacz komórkę caption, klikając raz przed słowem MÓJ. 7. Ustaw w tej komórce właściwość bgcolor, na wybraną wartość (sugestia: YellowGreen). 8. Zaznacz komórkę menu, klikając raz w kontrolkę MenuBanku i wciskając kursor w lewo. 9. Ustaw w tej komórce właściwość bgcolor, na wybraną wartość (sugestia: Beige). 10. Ustaw także jej wysokość (właściwość height) na 400px. 11. Zaznacz komórkę copyright, klikając raz np. w napis Copyright. 12. Ustaw tej komórce właściwość bgcolor na wybraną wartość (sugestia: Beige). 13. Zmień także w kontrolce LnkAutor adres e-mail na swój, modyfikując właściwości NavigateUrl oraz Text. 14. Sprawdź, czy podoba ci się wygląd strony. 15. Zaznacz główną tabelę (kliknij w jedną z jej ramek) i usuń z tabeli ramkę, ustawiając jej właściwość border na 0 (zero). 16. Otwórz plik bank.css z podkatalogu style. Dodaj style ramek dla komórek, jak poniżej. Sprawdź, czy podoba ci się wygląd strony. Przykład 12. Rozbudowa arkusza stylów dodanie ramek wokół wybranych komórek td.caption { font-size: 200%; border: black 1px dashed; } td.menu { } border: black 1px solid; td.copyright { font-size: 60%; border: black 1px dashed; } 6

Udało ci się zaprojektować szkielet wyglądu witryny! Zapisz bieżącą kopię pliku Layout.aspx w podkatalogu temp. Będzie to kopia zapasowa na wypadek, gdyby trzeba było zrobić coś jeszcze raz. 5.3. Witryna o wielu stronach Nasza witryna będzie docelowo posiadać wiele stron. Przy tej okazji wynikną dwa problemy, a mianowicie: jak zapewnić spójny wygląd witryny oraz jak poradzić sobie z przyszłymi ewentualnymi jego zmianami? Podejście najprostsze, polegające na kopiowaniu pliku Layout.aspx i zmianie treści strony jest zaprzeczeniem znanej już reguły DRY (ang. Don t Repeat Yourself), gdyż zmiany wyglądu trzeba wprowadzać we wszystkich powstałych już dotąd plikach. Może natomiast sprawdzić się podejście bazujące na wstawianiu w określone miejsca strony kontrolek, zawierających stałe elementy strony. Zmiany ograniczają się wtedy tylko do treści kontrolek. Nie zapewni to jednak elastyczności przy zmianach liczby takich elementów czy ich położenia na stronie. Najprostszym rozwiązaniem jest wykorzystanie plików włączanych. Każda nowa strona będzie zawierać przede wszystkim treść, deklaracje znaczników dla kontrolek oraz dwie dyrektywy włączające górną część strony przed właściwą treścią, oraz dolną część strony za treścią. Schematycznie można przedstawić to tak: 7

bank.css arkusz stylów użycie Strona.aspx TREŚĆ strona włączenie Menu.ascx kontrolka Header.txt TREŚĆ Footer.txt TREŚĆ Rysunek 4. Pliki włączane, zapewniające wspólny wygląd dla wszystkich stron witryny 5.4. Wykorzystanie plików włączanych Podzielimy teraz stronę Layout.aspx na trzy części, zgodnie z powyższym schematem. Będą to pliki: Strona.aspx, Header.txt oraz Footer.txt. Ich zadaniem będzie uproszczenie procesu tworzenia nowych stron, przy zachowaniu maksimum elastyczności definiowania wyglądu witryny. Ewentualne zmiany wyglądu będą możliwe bez konieczności zmian w już istniejących stronach i będą ograniczać się tylko do plików Header.txt i Footer.txt. Po włączeniu do strony plik Header.txt będzie tworzyć górną część (nagłówek) strony. Za nią będzie można zbudować jej właściwą zawartość, nie martwiąc się o zachowanie spójnego układu witryny. Następnie włączany do strony plik Footer.txt będzie tworzyć jej dolną część (stopkę), zamykając szablon. 8

W celu zmiany sposobu organizacji strony wykonaj następujące czynności: 1. Otwórz plik Layout.aspx (lub znajdź go na liście otwartych dokumentów). 2. Zapisz go pod nową nazwą: Strona.asp. 3. Przejdź na zakładkę HTML i zauważ, że w treści strony wstawione są komentarze. Przykład 13. Kod HTML z zaznaczonymi sekcjami nagłówka i stopki strony <body> <form runat="server"> <!-- POCZĄTEK PLIKU Header.txt --> <div align="center">... <td class="main" valign="top" width="100%"> <!-- KONIEC PLIKU Header.txt --> <font size="4"><strong>tytuł</strong></font> treść <!-- POCZĄTEK PLIKU Footer.txt --> </td>... </div> <!-- KONIEC PLIKU Footer.txt --> </form> </body> 4. Zaznacz i skopiuj linie od komentarza <!-- POCZĄTEK PLIKU Header.txt --> włącznie, aż do komentarza <!-- KONIEC PLIKU Header.txt -->. 5. Załóż nowy plik tekstowy, poleceniem File New File Text File (z sekcji General), podając nazwę Header.txt. 6. Wklej do pliku skopiowane linie i zapisz go; możesz również zamknąć ten plik. 7. Podobnie zaznacz i skopiuj linie od komentarza <!-- POCZĄTEK PLIKU Footer.txt --> włącznie, aż do komentarza <!-- KONIEC PLIKU Footer.txt -->. 8. Załóż nowy plik tekstowy, poleceniem File New File Text File (z sekcji General), podając nazwę Footer.txt. 9. Wklej do pliku skopiowane linie i zapisz go; możesz zamknąć plik. 10. Wróć do pliku Strona.aspx i usuń skopiowane linie, zamiast nich wpisz dyrektywy włączające treść plików Header.txt oraz Footer.txt. 9

Przykład 14. Kod HTML z dyrektywami włączającymi pliki <body> <form runat="server"> <!-- #Include file="header.txt" --> <font size="4"><strong>tytuł</strong></font> treść <!-- #Include file="footer.txt" --> </form> </body> Zapisz plik Strona.aspx i sprawdź, czy poprawnie działa. Jeśli tak, to gratulacje! Masz w tym momencie dobrze zrobiony szablon dla stron witryny bankowej! Zapisz bieżącą kopię pliku Strona.aspx w podkatalogu temp będzie to kopia zapasowa, służąca jako punkt wyjścia do tworzenia nowych stron witryny. Jeśli chcesz mieć porządek w projekcie, możesz usunąć z katalogu głównego projektu pliki Layout.aspx i Strona.aspx. Nie chcesz chyba pozwalać użytkownikom na zaglądanie na te strony? 5.5. Przygotowanie szkieletu witryny Ta część jest raczej łatwa i polega na stworzeniu w oparciu o plik Strona.aspx dziewięciu nowych stron ASP.NET oraz dwóch katalogów. W tym celu wykonaj następujące czynności: 1. Otwórz plik Strona.aspx z podkatalogu temp. 2. Zmień napis TYTUŁ na Strona główna, możesz usunąć słowo treść; zapisz zmieniony plik w katalogu głównym pod nową nazwą Default.aspx. 3. Podobnie postępując, stwórz pozostałe pliki, zgodnie z poniższą tabelą. Tabela 2. Podstawowe strony witryny Katalog Nazwa pliku Tytuł strony MojBank Default.aspx Strona główna 10

Regulamin.aspx Cennik.aspx Wyloguj.aspx Testy.aspx Regulamin Oprocentowanie i prowizje Zakończenie pracy Testy 4. W katalogu głównym projektu załóż dwa podkatalogi: bank i klient. 5. Zmień tytuł strony na Twój profil; przejdź do zakładki HTML i popraw ścieżki do włączanych plików Header.txt i Footer.txt. Przykład 15. Kod HTML z dyrektywami włączającymi pliki z katalogu nadrzędnego <body> <form runat="server"> <!-- #Include file="../header.txt" --> <font size="4"><strong>tytuł</strong></font> treść <!-- #Include file="../footer.txt" --> </form> </body> 6. Zapisz zmieniony plik w podkatalogu klient pod nową nazwą Default.aspx. 7. Zmień napis Twój profil na Twoje konta, zapisz zmieniony plik w podkatalogu klient pod nową nazwą: TwojeKonta.aspx. 8. Podobnie postępując, stwórz w podkatalogu bank pliki Default.aspx i Kasa.aspx, zgodnie z poniższą tabelą. Tabela 3. Dodatkowe strony witryny, dostępne po zalogowaniu Katalog Nazwa pliku Tytuł strony MojBank\klient Default.aspx Twój profil TwojeKonta.aspx Twoje konta MojBank\bank Default.aspx Administracja Kasa.aspx Obsługa klienta 9. Zapisz dokonane zmiany i sprawdź, czy masz dostęp do wszystkich stron przez menu nawigacyjne. 11

6. Wykorzystanie sesji Jak wiadomo, sesja jest obiektem pozwalającym przechować informacje powiązane z użytkownikiem korzystającym z aplikacji. Może to być np. identyfikator i/lub rola zalogowanego użytkownika, przez co aplikacja może wybiórczo udostępniać niektóre strony lub elementy tych stron. Takie właśnie ćwiczenie wykonasz już niebawem. Warto jednak zauważyć, że nie jest to jedyne rozwiązanie problemu rozpoznawania użytkownika. Jak się okaże w następnym module, ASP.NET posiada zintegrowane mechanizmy zabezpieczeń, które w połączeniu z bazą danych użytkowników umożliwią zaawansowaną kontrolę dostępu do elementów aplikacji. 6.1. Dynamiczna kontrolka menu Rozbudujesz teraz kontrolkę użytkownika, która będzie dynamicznie wyświetlać bądź ukrywać zawartość pozycji menu. Pozycje menu będą wyświetlane zależnie od roli zalogowanego użytkownika, którym będzie albo klient, albo pracownik banku. Podstawową sprawą jest to, że wystarczy odpowiednio ukrywać wybrane polecenia menu, aby zapewnić żądaną funkcjonalność. Są to polecenia: Twoje konta, Obsługa klienta i Zakończenie pracy. Ukrycie takie traktowane jest przez ASP.NET dosłownie kod HTML niewidocznych elementów nie jest generowany. Dla uzyskania pożądanego efektu kontrolka menu zostanie podzielona na trzy części: polecenia dostępne dla wszystkich (plik Menu.ascx), polecenia dla klientów (plik MenuKlient.ascx) oraz polecenia dla pracowników (plik MenuPracownik.ascx). W tym celu wykonaj poniższe czynności: 1. Znajdź w katalogu ascx plik Menu.ascx i skopiuj go do katalogu temp będzie to kopia zapasowa kontrolki menu na wypadek, gdyby trzeba było coś zrobić jeszcze raz. 2. Otwórz teraz w środowisku Web Matrix plik Menu.ascx z katalogu ascx. 3. Stwórz teraz nową kontrolkę poleceniem File New File ASP.NET User Control, upewnij się czy w polu Language jest wybrana opcja C#, a następnie zapisz tę kontrolkę w katalogu ascx pod nazwą MenuKlient.ascx. 4. Przejdź do zakładki HTML jak widzisz, poza komentarzem <!-- Insert content here --> nic tam nie ma. Umieścisz tutaj kod HTML, który będzie treścią tworzonej kontrolki. Będzie ona następnie użyta w głównej kontrolce menu. 12

5. Odszukaj teraz otwarty dokument Menu.ascx i przejdź na zakładkę HTML; wytnij wskazaną część kodu HTML i przenieś do kontrolki MenuKlient.ascx (znacznik <br/>, link Twoje konta, znacznik <br/> i link Zakończenie pracy). Przykład 16. Kod kontrolki menu przenoszony do pliku MenuKlient.ascx <asp:panel id="panelmenu" runat="server" Width="200px">... <strong> Dla klientów</strong> <asp:hyperlink id="lnkklientdefault" runat="server" NavigateUrl="/klient/Default.aspx">Twój profil</asp:hyperlink> <asp:hyperlink id="lnkklientkonta" runat="server" NavigateUrl="/klient/TwojeKonta.aspx">Twoje konta</asp:hyperlink> <asp:hyperlink id="lnkklientwyloguj" runat="server" NavigateUrl="/Wyloguj.aspx">Zakończenie pracy</asp:hyperlink>... </asp:panel> 6. Zapisz zmiany dokonane w kontrolce MenuKlient.ascx. 7. Podobnie stwórz drugą kontrolkę, wywołując polecenie File New File ASP.NET User Control, upewnij się, czy w polu Language wybrana została opcja C#, a następnie zapisz tę kontrolkę w katalogu ascx pod nazwą MenuPracownik.ascx. 8. Odszukaj otwarty dokument Menu.ascx i przejdź na zakładkę HTML; wytnij wskazaną część kodu HTML i przenieś do kontrolki MenuPracownik.ascx (znacznik <br/>, link Obsługa klienta, znacznik <br/> i link Zakończenie pracy). 13

Przykład 17. Kod kontrolki menu przenoszony do pliku MenuPracownik.ascx <asp:panel id="panelmenu" runat="server" Width="200px">... <strong> Obsługa</strong> <asp:hyperlink id="lnkbankdefault" runat="server" NavigateUrl="/bank/Default.aspx">Administracja</asp:HyperLink> <asp:hyperlink id="lnkbankkasa" runat="server" NavigateUrl="/bank/Kasa.aspx">Obsługa klienta</asp:hyperlink> <asp:hyperlink id="lnkbankwyloguj" runat="server" NavigateUrl="/Wyloguj.aspx">Zakończenie pracy</asp:hyperlink> <asp:hyperlink id="lnktesty" runat="server" NavigateUrl="/Testy.aspx">Testy</asp:HyperLink> </asp:panel> 9. Zapisz zmiany dokonane w kontrolce MenuPracownik.ascx. 10. Powróć do dokumentu Menu.ascx i w miejscach, gdzie były wycięte linie wstaw nowe znaczniki (wywołania utworzonych kontrolek). 14

Przykład 18. Użycie stworzonych kontrolek wewnątrz głównej kontrolki menu <asp:panel id="panelmenu" runat="server" Width="200px"> <asp:hyperlink id="lnkdefault" runat="server" NavigateUrl="/Default.aspx">Strona główna</asp:hyperlink> <strong> Ogólne</strong> <asp:hyperlink id="lnkregulamin" runat="server" NavigateUrl="/Regulamin.aspx">Regulamin</asp:HyperLink> <asp:hyperlink id="lnkcennik" runat="server" NavigateUrl="/Cennik.aspx">Oprocentowanie i prowizje</asp:hyperlink> <strong> Dla klientów</strong> <asp:hyperlink id="lnkklientdefault" runat="server" NavigateUrl="/klient/Default.aspx">Twój profil</asp:hyperlink> <Bank:MenuKlient id="menuklient" runat="server"></bank:menuklient> <strong> Obsługa</strong> <asp:hyperlink id="lnkbankdefault" runat="server" NavigateUrl="/bank/Default.aspx">Administracja</asp:HyperLink> <Bank:MenuPracownik id="menupracownik" runat="server"></bank:menupracownik> <asp:hyperlink id="lnktesty" runat="server" NavigateUrl="/Testy.aspx">Testy</asp:HyperLink> </asp:panel> 15

11. Przejdź na zakładkę All i dodaj wyróżnione dyrektywy rejestrujące znaczniki kontrolek (bez nich strona nie będzie działać). Przykład 19. Deklaracje znaczników dla stworzonych kontrolek <%@ Control Language="C#" %> <%@ Register TagPrefix="Bank" TagName="MenuKlient" Src="MenuKlient.ascx" %> <%@ Register TagPrefix="Bank" TagName="MenuPracownik" Src="MenuPracownik.ascx" %> <script runat="server"> 12. Zapisz wszystkie dokonane zmiany i sprawdź, czy strony nadal poprawnie działają z nowymi kontrolkami menu. Sposób wykonania powyższych modyfikacji jest wbrew pozorom bardzo istotny. Chodzi tu głównie o przenoszony z dużej kontrolki kod HTML. Pamiętając, że każda kontrolka ma za zadanie generować swój kod HTML, warto chwilę zastanowić się, jaki będzie efekt ukrycia jednej z kontrolek MenuKlient lub MenuPracownik. Otóż spowoduje to, że ich kodu HTML nie będzie w stronie, którą otrzyma przeglądarka użytkownika. W tym momencie bardzo istotna jest poprawna kombinacja znaczników <br> przeplatanych poleceniami menu, zgodna z powyższymi wskazówkami. Tylko wtedy menu pozbawione części poleceń będzie nadal wyglądać zgodnie z oczekiwaniami. 6.2. Test logowania użytkownika do aplikacji Aby przetestować ukrywanie pozycji menu, zmodyfikujesz teraz stronę Testy.aspx. Wybranie pozycji z listy dostępnych ról i wciśnięcie przycisku Ustaw będzie zmieniać rolę użytkownika. W tym momencie zawartość menu powinna ulec zmianie. Wciśnięcie przycisku Wyloguj będzie kasować rolę użytkownika. W następnych modułach prosty model zachowania kontrolki menu oparty na sesjach zostanie rozbudowany wykorzystane zostaną bowiem zintegrowane mechanizmy uwierzytelniania i zabezpieczania aplikacji ASP.NET. 16

Rysunek 5. Strona do testowania zmian roli użytkownika W tym celu wykonaj poniższe czynności: 1. Otwórz dokument Testy.aspx, zapisany w głównym katalogu projektu. 2. W górnej części dodaj etykietkę Label, listę rozwijaną DropDownList oraz dwa przyciski Button. 3. Dla listy rozwijanej DropDownList zmodyfikuj listę elementów (właściwość Items), dodając przyciskiem Add trzy elementy:, klient i pracownik, oraz ustaw właściwość AutoPostBack na True. 4. Ustaw pozostałe właściwości kontrolek zgodnie z poniższą tabelą. Kontrolka Tabela 4. Kontrolki do zmian roli użytkownika Nazwa kontrolki Nazwa właściwości Wartość właściwości (ID) Label LabRola Text Rola użytkownika: DropDownList DdListRole AutoPostBack True ListItem[0] Text - Value - ListItem[1] Text klient Value klient ListItem[2] Text pracownik Value pracownik Button BtnUstaw Text Ustaw Button BtnWyloguj Text Wyloguj 5. Pozostaje tylko ożywić tą stronę. Stwórz więc dla przycisku BtnUstaw obsługę zdarzenia Click i napisz kod, który będzie dodawał do sesji użytkownika rolę wybraną z listy przewijanej oraz informował nas o tym. Przykład 20. Dodawanie do sesji roli użytkownika void BtnUstaw_Click(object sender, EventArgs e) { Session["rola"] = DdListRole.SelectedItem.Value; Status.Text = "Wybrana rola: " + Session["rola"]; Status.Visible = true; } 6. Stwórz dla przycisku BtnWyloguj obsługę zdarzenia Click i napisz kod, który będzie usuwał rolę użytkownika z sesji. Przykład 21. Usuwanie roli użytkownika z sesji void BtnWyloguj_Click(object sender, EventArgs e) { Session.Remove("rola"); 17

} Status.Text = ""; Status.Visible = false; 7. Ostatnim prostym elementem jest uwzględnienie roli użytkownika w kontrolce menu przejdź do pliku Menu.ascx i korzystając z zakładki Design zaznacz kontrolkę PanelMenu, dodaj jej obsługę zdarzenia PreRender i wpisz kod ukrywający lub wyświetlający elementy menu. Przykład 22. Uzależnienie widoczności kontrolek od roli użytkownika void PanelMenu_PreRender(object sender, EventArgs e) { MenuKlient.Visible = (Session["rola"] == "klient"); MenuPracownik.Visible = (Session["rola"] == "pracownik"); } 8. Zapisz wszystkie zmiany i sprawdź działanie strony Testy.aspx. W obsłudze zdarzenia PreRender panelu można użyć właściwości Visible kontrolek, ponieważ każda kontrolka dziedziczy składowe z klasy System.Web.UI.WebControls.Control w tym interesującą nas Visible. 6.3. Ograniczanie dostępu do wybranych elementów aplikacji Na koniec dodasz jeszcze jeden element aplikacji, który będzie użyty m.in. w module 5 oraz wyjaśniony dokładniej w module 6. Chodzi o plik konfiguracyjny web.config. Jest to plik dający bardzo dużą elastyczność i możliwości konfiguracji aplikacji ASP.NET. Można dzięki niemu zmieniać otoczenie i zachowanie aplikacji bez zmiany jej zawartości czy kodu. Tym razem wykorzystasz prosty, ale skuteczny mechanizm, dzięki któremu wybrane pliki i katalogi nie będą dostępne dla zwykłych użytkowników. Nie będzie więc można odczytać zawartości plików ani zobaczyć zawartości katalogów przez przeglądarkę (nawet znając ich nazwy), natomiast z wnętrza samej aplikacji pliki będą oczywiście dostępne. W celu ograniczenia dostępu do plików wykonaj poniższe czynności: 1. Stwórz nowy plik konfiguracyjny aplikacji, poleceniem File New File, wskazując w sekcji General pozycję Web.Config; zapisz ten plik w katalogu głównym projektu pod wymaganą nazwą web.config. 18

2. Plik web.config jest dokumentem XML posiada własne znaczniki i atrybuty; zauważ, że większość proponowanych sekcji tego pliku jest ujęta w komentarze <!-- i --> oznacza to, że ustawienia tam zapisane nie są brane pod uwagę. 3. Przejdź na koniec pliku i dodaj trzy sekcje zabraniające dostępu użytkownikom do plików Header.txt, Footer.txt oraz do wszystkich plików z katalogu temp. Przykład 23. Wyłączenie dostępu do wybranych plików i katalogów przez plik web.config... <!-- The <authorization> section enables developers/administrators to configure whether a user or role has access to a particular page or resource. This is accomplished by adding "<allow>" and "<deny>" sub-tags beneath the <authorization> section, specifically detailing the users/roles allowed or denied access. Note: The "?" character indicates "anonymous" users (ie: non authenticated users). The "*" character indicates "all" users. <authorization> <allow users="joeuser" /> <allow roles="admins" /> <deny users="*" /> </authorization> --> </system.web> <location path="header.txt"> <system.web> <authorization> <deny users="*" /> </authorization> </system.web> </location> <location path="footer.txt"> <system.web> 19

<authorization> <deny users="*" /> </authorization> </system.web> </location> <location path="temp"> <system.web> <authorization> <deny users="*" /> </authorization> </system.web> </location> </configuration> 4. Zapisz zmiany i powróć do okna przeglądarki; kliknij w dowolne polecenie z menu nawigacyjnego, zauważ chwilowe opóźnienie, które spowodowane jest wzięciem pod uwagę przez serwer ASP.NET zmian w konfiguracji aplikacji. 5. Spróbuj zmienić w pasku adresu przeglądarki nazwę otwartego dokumentu, np. na: http://localhost:8080/header.txt http://localhost:8080/footer.aspx http://localhost:8080/temp/ 6. W pierwszych dwóch przypadkach powinien pojawić się komunikat o błędzie Access denied, zaś w ostatnim zawartość katalogu (czyli normalnie); jednak próba odczytu dowolnego pliku z katalogu temp także powinna powodować taki sam błąd jak powyżej. W dalszej części kursu przedstawione zostaną mechanizmy ograniczania dostępu do wybranych części aplikacji dla niezalogowanych użytkowników. Będą one oparte na loginach i rolach użytkowników, zapisanych w bazie danych. 20