KUP KSIĄŻKĘ NA: PRZYKŁADOWY ROZDZIAŁ KOMUNIKATY DLA UŻYTKOWNIKA I ROLE UŻYTKOWNIKÓW

Podobne dokumenty
KUP KSIĄŻKĘ NA: PRZYKŁADOWY ROZDZIAŁ KOMUNIKATY DLA UŻYTKOWNIKA

Sesje, ciasteczka, wyjątki. Ciasteczka w PHP. Zastosowanie cookies. Sprawdzanie obecności ciasteczka

Laboratorium 7 Blog: dodawanie i edycja wpisów

Backend Administratora

INSTRUKCJA. zakładania konta w Społeczności CEO oraz rejestrowania się do programu lub na szkolenie/cykl szkoleniowy KROK 1

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

Modele danych walidacja widoki zorientowane na model

Platforma e-learningowa

Aktualizacja SMSFall v Data publikacji:

Wstęp. Ale po co? Implementacja

Sesje i logowanie. 1. Wprowadzenie

Laboratorium 6 Tworzenie bloga w Zend Framework

REFERAT O PRACY DYPLOMOWEJ

APLIKACJA SHAREPOINT

Kontrola sesji w PHP HTTP jest protokołem bezstanowym (ang. stateless) nie utrzymuje stanu między dwoma transakcjami. Kontrola sesji służy do

Instalacja systemu zarządzania treścią (CMS): Joomla

Baza danych do przechowywania użytkowników

Programowanie w Sieci Internet Python - c. d. Kraków, 28 listopada 2014 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

Instrukcja użytkownika

Dokumentacja serwisu internetowego Zespołu Szkół Technicznych w Radomiu.

Padlet wirtualna tablica

0.1 Logowanie do serwisu

SYSTEM INFORMATYCZNY KS-SEW

PHP: bloki kodu, tablice, obiekty i formularze

Wysyłanie pliku na serwer. Plik na serwerze.

Zakładanie konta w JSA przez administratora JSA. Rozpocznij

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

Podstawy technologii WWW

Internetowy System Składania Wniosków PISF wersja 2.2. Instrukcja dla Wnioskodawców

Aplikacje WWW - laboratorium

Podręcznik Użytkownika LSI WRPO

Elektroniczny Urząd Podawczy

Przewodnik użytkownika Bazy Ogłoszeń

LeftHand Sp. z o. o.

dokumentacja.md 4/1/2019 Aplikacja dostępna jest tutaj. Może z niej korzystać każdy członek ZHP posiadający konto Office365.

OMNITRACKER Wersja testowa. Szybki przewodnik instalacji

Podstawy technologii WWW

Ćwiczenie: JavaScript Cookies (3x45 minut)

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

PHP 5 język obiektowy

Platforma e-learningowa

INSTRUKCJA UŻYTKOWNIKA. Wielkopolski system doradztwa. edukacyjno-zawodowego

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

Instrukcja logowania się i wprowadzania ocen do systemu USOSweb

Baza Aktów Własnych. Autor: Piotr Jegorow. ABC PRO Sp. z o.o.

INSTRUKCJA. rejestrowania się na szkolenie/cykl szkoleniowy oraz uzupełniania niezbędnej unijnej dokumentacji uczestnictwa w projekcie (PEFS)

Baza danych. Program: Access 2007

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

INSTRUKCJA. zakładania konta w Społeczności CEO oraz rejestrowania się do programu lub na szkolenie/cykl szkoleniowy KROK 1

Aplikacje webowe w obliczu ataków internetowych na przykładzie CodeIgniter Framework

1 Moduł Konfigurowanie Modułu

Część 3 - Konfiguracja

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

Informatyka II. Laboratorium Aplikacja okienkowa

Instrukcja laboratoryjna cz.3

JQuery. $('#pierwszy').css('color','red').hide('slow').show(3000); $(document).ready(function() { //... tutaj nasze skrypty jquery //...

wersja 1.0 ośrodek komputerowy uj cm ul. mikołaja kopernika 7e, Kraków tel

INSTRUKCJA KROK 1. UWAGA: Jeżeli posiadasz już konto w Społeczności CEO, przejdź do kroku 9, pomijając część dotyczącą tworzenia konta w Społeczności.

Import danych z plików Excel. (pracownicy, limity urlopowe i inne)

Ustalanie dostępu do plików - Windows XP Home/Professional

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

timetrack Przewodnik Użytkownika timetrack Najważniejsze Funkcje

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

KatMPBSoft - 1 -

INSTRUKCJA UŻYTKOWNIKA

Smarty PHP. Leksykon kieszonkowy

OMNITRACKER Wersja testowa. Szybki przewodnik instalacji

WellCommerce Poradnik: CRM

Instrukcja rejestracji w systemie System Wspierający Prowadzenie Prac Badawczo-Naukowych oraz Współdzielenie i Publikację Wyników Prac

Wszystkie prawa zastrzeżone. NOWY BIZNESLINK FAQ dla Klientów

Serwery aplikacji. dr Radosław Matusik. radmat

1.2 Prawa dostępu - Role

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Procedura zgłaszania problemów z obsługą oraz nieprawidłowości w funkcjonowaniu systemu PEFS 2007 w zakresie Programu Operacyjnego Kapitał Ludzki

Blogger opis serwisu

Dokumentacja użytkownika E-działania - POLCHAR

Platforma zakupowa GRUPY TAURON

Instrukcja obsługi systemu zarządzania treścią dwajeden.pl

Instrukcja użytkownika

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

Projektowani Systemów Inf.

SYSTEM INFORMATYCZNY KS-SEW

Programowanie w Ruby

Elektroniczne Dzienniki Urzędowe

SMS Kod Automatyczny

mcourser platforma edukacyjna z multimedialnymi mlibro Zestaw darmowych aplikacji do zainstalowania

Zakładanie konta w serwisie Canva i opcje interfejsu

14. POZOSTAŁE CIEKAWE FUNKCJE

Facebook, Nasza klasa i inne. podstawowe informacje o serwisach społeczności internetowych. Cz. 2. Facebook

Nowy szablon stron pracowników ZUT

Zawartość. Wstęp. Moduł Rozbiórki. Wstęp Instalacja Konfiguracja Uruchomienie i praca z raportem... 6

3S TeleCloud - Aplikacje Instrukcja użytkowania usługi 3S FAX SYSTEM

Instrukcja Użytkownika Systemu Zarządzania Tożsamością Wersja. 1.0

7. Pętle for. Przykłady

Test przykładowy 2 PAI WSB Wrocław /06/2018

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:

Sprawdzenie czy połączenie przebiegło poprawnie if (mysqli_connect_errno()) { echo Błąd; Połączenie z bazą danych nie powiodło się.

CREATE USER

Rejestracja nowych Dystrybutorów

Serwery aplikacji. dr Radosław Matusik. radmat

Transkrypt:

KUP KSIĄŻKĘ NA: WWW.PRAKTYCZNEPHP.PL PRZYKŁADOWY ROZDZIAŁ KOMUNIKATY DLA UŻYTKOWNIKA I ROLE UŻYTKOWNIKÓW

KOMUNIKATY DLA UŻYTKOWNIKA W większości aplikacji potrzebujesz mieć możliwość powiadomienia użytkownika o rezultacie wykonywanej akcji. Przykładowo, akcją taką może być zakładanie nowego konta na stronie aplikacji. Odwiedzający musi wiedzieć, czy rejestracja zakończyła się powodzeniem. Być może chcesz go poprosić, by odwiedził swoją skrzynkę mailową i kliknął w link w nowo otrzymanej wiadomości. Sukcesy i prośby to jeden typ wiadomości. Drugim, ważnym rodzajem komunikatów są błędy. Błędy mogą wynikać z walidacji wprowadzonych danych lub z nieprawidłowości samego systemu. Walidacja, czyli sprawdzanie informacji wpisanych przez użytkownika pod kątem formatu, długości, dostępności nazw itp. (np. adres email jest błędnego formatu). Błędy systemu i jego dostępności to przykładowo: serwer SMTP nie odpowiada, padł serwer aplikacji lub sieć jest przeciążona. Błędów może pojawić się cała masa, które często wychodzą długo po wypuszczeniu aplikacji w świat. Przykładowo, aplikacja może tak rosnąć, że skończy nam się dostępne miejsce na dysku (lub dobijemy do dopuszczalnego rozmiaru bazy danych). Wtedy wysyłanie wiadomości również zakończy się niepowodzeniem. Ważne, z punktu widzenia webmastera, byś był stale świadomym tego, co dzieje się na serwerze i w jakim stanie jest aplikacja. Jeśli chodzi o komunikaty, zazwyczaj możemy podzielić je na cztery podstawowe typy: Success Message: powiadomienie o pomyślnym wykonaniu akcji (np. logowania lub rejestracji). Info Message: informacja o charakterze neutralnym (np. planowana niedostępność systemu w najbliższych godzinach lub kończący się abonament). Warning Message: ostrzeżenie dla użytkownika (np. za 60 sekund wygaśnie sesja). Error Message: informacja o błędzie, zazwyczaj podczas przetwarzania jakiejś akcji (błąd w logowaniu, brak użytkownika, błędy walidacji danych etc.)

W projektowanej przez nas aplikacji skorzystasz z dwóch typów powiadomień - sukcesu i błędu. Posłużysz się jednym, spójnym mechanizmem, by obsłużyć oba typy. Mianowicie, użyjesz sesji. W zmiennej superglobalnej $_SESSION są trzymane wszystkie zmienne sesyjne (aktualne dla obecnej sesji użytkownika). Sesję możemy rozumieć jako pojedyncze odwiedziny użytkownika. Standardowa sesja trwa 24 minuty. Po tym czasie, gdy użytkownik nie odświeży strony, tworzona jest nowa sesja, a wraz z nią wszystkie zmienne sesyjne. To było szybkie przypomnienie tego, jak działa sesja. Teraz napiszmy sobie własną klasę Messages, by nie używać stale zmiennej $_SESSION, a mieć swój własny dostęp do zmiennych sesyjnych. Dopiszemy do niej trzy ogólnodostępne metody statyczne, które będą dostępne z każdego miejsca w naszej aplikacji. Pierwszymi dwoma metodami są setsuccess($message), i seterror($message), które będą dodawały komunikaty odpowiedniego typu do naszych zmiennych sesyjnych. Trzecią jest flashmessages(), która zaprezentuje wszystkie komunikaty zebrane w zbiorze komunikatów i zaprezentuje je użytkownikowi. Następnie zbiór komunikatów zostanie wyczyszczony, by nie pokazywać tej samej wiadomości wielokrotnie temu samemu użytkownikowi. Z racji, że korzystamy z mechanizmu sesji, nie ma ryzyka, że komunikat przeznaczony dla jednego użytkownika zostanie omyłkowo zaprezentowany innemu odwiedzającemu. Dla każdego z odwiedzających tworzona jest osobna sesja na serwerze i tylko do tego obiektu sesji są dodawane zbiory komunikatów. Korzystamy ze zmiennej superglobalnej $_SESSION, gdzie dodajemy własne zdefiniowane indeksy: $_SESSION["message"]["success"] $_SESSION["message"]["error"] Teraz, gdy korzystamy z metody flashmessages(), metoda ta przeczesuje tablicę ["message"] i sprawdza, czy istnieją indeksy success i error. Jeśli tak, wyświetla ich

zawartość w odpowiedni dla nich sposób. Dla success będzie to zielona belka, dla error będzie to belka czerwona. To, jak wygląda komunikat, zależy ściśle od tego, z którego szablonu HTML skorzystamy do tworzenia własnej aplikacji webowej. Może się okazać, że twórca wcale nie przewidział takich komunikatów (co zdarza się często w przypadku darmowych szablonów) i będziemy musieli sami zatroszczyć się o zaprojektowanie ich wyglądu. Kod klasy Messages: <?php namespace Wesel\Shortener; class Messages public static function seterror($message) $_SESSION['messages']['error'] = $message; public static function setsuccess($message) $_SESSION['messages']['success'] = $message; public static function flashmessages() if (isset($_session['messages']['error'])) echo '<div class="row"><div class="alert alert-danger alertdismissable"><button type="button" class="close" data-dismiss="alert" ariahidden="true"> </button>'.$_session['messages']['error'].'</div></div>'; unset($_session['messages']['error']); if (isset($_session['messages']['success'])) echo '<div class="row"><div class="alert alert-success alertdismissable"><button type="button" class="close" data-dismiss="alert" ariahidden="true"> </button>'.$_session['messages']['success'].'</div></div>'; unset($_session['messages']['success']); Przeanalizujmy sobie klasę Messages.

Klasa Messages, jak nasze pozostałe klasy, znalazła się w przestrzeni nazw \Wesel\Shortener. Dzięki temu, dodając inny komponent zawierający klasę Messages, nie napotkamy konfliktu nazewnictwa. Nie używając namespace'ów (przestrzeni nazw) moglibyśmy mieć tylko jedną klasę o konkretnej nazwie w całym naszym projekcie. Metody seterror i setsuccess przyjmują jako argument jeden parametr $message. Przy jego pomocy będziemy przekazywać wiadomość do wyświetlenia czy to błędu, czy pozytywnego rezultatu. Wewnątrz tych metod odwołujemy się do zmiennej superglobalnej $_SESSION. W niej korzystamy z tablicy ['messages'], do której dodajemy wiadomości w indeksach ['error'] oraz ['success']. Metoda flashmessages() wyświetla wiadomości z indeksów ['error'] oraz ['success'], po czym, korzystając z wbudowanego polecenia unset, usuwamy indeksy z tablicy $_SESSION['messages']. Teraz użyjesz metody flashmessages() w klasie Page, która jest odpowiedzialna za wyświetlenie górnej części strony. Dzięki temu, każda strona renderowana przy pomocy klasy Page będzie wyświetlać zawarte w sesji komunikaty. Dodatkowo, będzie to robić w sposób spójny z pozostałymi stronami.

ROLE UŻYTKOWNIKÓW W niemal każdej rozbudowanej aplikacji potrzebujemy rozróżnić typy użytkowników. W zależności od typu, musimy nadać użytkownikowi odpowiednie uprawnienia do wykonywania danych akcji. Typów może być wiele. Przykładowo, możemy mieć: zwykłego użytkownika, użytkownika, który opłaca abonament, moderatora, administratora. Każdy z nich będzie widział nieco inną zawartość aplikacji niż pozostali. Będzie miał dostęp do dodatkowych funkcji i akcji. W jaki sposób osiągnąć taki efekt w programowaniu? Zazwyczaj stosuje się do tego mechanizm ról. JAK TO DZIAŁA? Każdy profil użytkownika (UserID) będzie miał odniesienie do tabeli z rolami. Tabelę nazwiemy role. Następnie, podczas logowania, pobierzemy z tabeli role odpowiadającą użytkownikowi rolę. Na jej bazie będziemy mogli prezentować mu dostępne opcje. Jakie role będą nam potrzebne w systemie do skracania linków? Tak naprawdę tylko dwie: regular_user, admin.

Moglibyśmy to ograć bardzo łatwo, dodając do tabeli user pole "isadmin". Wtedy, ustawialibyśmy 0 (jeśli nie jest adminem) lub 1 (jeśli jest). Jednak, by sprawić, że system będzie bardziej elastyczny na przyszłość, podejdziemy książkowo do tematu. Stworzymy osobą tabelę z rolami, a tabelę user wzbogacimy o odnośnik do RoleID. Tabela role będzie zawierała tylko dwie kolumny: ID Name Do tabeli user dodajemy kolumnę RoleID, która jest kluczem obcym dla tabeli role. Teraz, w pobieranym obiekcie user, po zalogowaniu, będziemy posiadać również jego RoleID, które determinuje nam rolę użytkownika. Dodajmy do naszego modelu User.php dodatkową metodę, która sprawdzi, czy użytkownik jest adminem. Metoda isadmin() będzie zwracała true, jeśli RoleID jest 1, w przeciwnym wypadku false. Dzięki temu, obiekt zalogowanego usera będzie w łatwy sposób przedstawiał się czy ma uprawnienia administratora. Wystarczy, że użyjemy if (SESSION['user']->IsAdmin()) we wszystkich funkcjach wymagających uprawnień administratora, by łatwo zdecydować, czy może ją wykonać akurat ten użytkownik. Tyczy się to zarówno logiki aplikacji, jak i samych widoków (wyświetlanie danego przycisku tylko adminowi). Dopiszmy teraz metodę getusers, gdzie sprawdzimy czy user jest adminem. Metoda posłuży nam do wyświetlenia listy userów na osobnej stronie, gdzie admin będzie mógł każdego z userów zablokować: private function getusers() if (empty($_session['user'])!$_session['user']->isadmin()) Messages::setError("Błąd autoryzacji"); header("location:https://". ROOT_APP_URL. "/loginform"); return; $db = new DB(); $db->query("select * FROM user;");

$results = $db->resultset(); return $results; Patrząc na powyższy kod, przejdźmy sobie po nim linijka po linijce: 1. Sprawdzamy, czy zmienna $_SESSION['user'] (ta, gdzie zapisujemy obiekt usera po zalogowaniu) jest pusta lub (jeśli nie jest) sprawdzamy, czy metoda isadmin zwraca false (user nie jest adminem) 2. Jeśli warunek jest SPEŁNIONY: ustawiamy komunikat dla użytkownika o błędzie autoryzacji, przekierowujemy na stronę logowania, wychodzimy z funkcji. 3. Tworzymy nowy obiekt połączenia z bazą danych i pobieramy kompletną listę userów. 4. Zwracamy listę userów. Kluczowym tutaj jest krok pierwszy. To on odnosi się bezpośrednio do uprawnień i ról użytkownika. Jeśli zalogowany użytkownik nie jest adminem, wyrzuci go do strony logowania z odpowiednim komunikatem. Tym sposobem możesz już rozróżnić typ zalogowanego użytkownika i pisać metody wymagające wyższych uprawnień do wykonania. W kolejnym rozdziale napiszesz widok z listą użytkowników, którym będzie można zablokować dostęp. Będzie to widok dostępny wyłącznie dla administratora.