Веб-майстер як створити свій сайт
Кожному з прав
структура БД
Для наочної демонстрації розмежування рівнів доступу відмінним прикладом послужить скрипт новин. Він буде показувати на сторінці новини, які зберігаються в таблиці і завантажуються з БД. Також наша БД буде містити ще одну таблицю, в якій будуть зберігатися імена користувачів і інформація про їхні права доступу. Таким чином, одні користувачі зможуть, наприклад, додавати новини, іншим буде вирішуватися коригувати і видаляти новини. Будуть і такі користувачі, у яких права доступу дозволять робити все, аж до створення і видалення користувачів.
Нам знадобиться БД, створимо і назвемо її news_service, виконавши такий sql-запит:
Тепер створимо таблицю для зберігання новин. Для цього слід виконати наступний sql-запит:
Тут ми маємо чотири поля. Ключове поле id служить прив'язкою до новини. В поле header зберігається заголовок новини. Сам текст новини буде зберігатися в полі text. Поле date служить для інформації про дату розміщення новини на сайті. Тепер розберемо структуру таблиці auth, яка відповідає за права користувачів в системі. Для створення таблиці виконаємо такий sql-запит:
У ключове поле login записується ім'я користувача. Поле pass зберігає md5-хеш пароля. Всі наступні поля визначають доступ до функцій і можуть мати лише значення true (дозволено) або false (заборонено). За замовчуванням, всі поля мають значення false, тобто функції заборонені. Поля визначають такі властивості:
- add - додавання новин
- edit - редагування новин
- delete - видалення новин
- add_user - створення нового користувача
- del_user - видалення користувача
Напишемо в коді стандартні рядки для підключення до сервера БД:
Робота з новинами
Тепер будемо відловлювати можливі дії користувача. Спочатку, виконаємо додавання новин:
Якщо скрипт отримує на обробку текст і заголовок для додавання, а також має права на додавання нових новин, то скрипт додає новий запис в таблицю. Перше поле ми не заповнюємо, так як воно заповнюється автоматично, далі записуємо заголовок і текст новини. За допомогою функції date () ми записуємо поточну дату в форматі дд.мм.рррр, яка відображає дату додавання новини.
Обробка редагування новини:
Якщо передається відредагований заголовок і текст новини, а також активного користувача дозволено змінювати новини, то ми оновлюємо дані в таблиці новин. Ідентифікація необхідної новини здійснюється по ключовому полю id, що вказує на номер новини, яку ми редагуємо.
Видалення користувача з системи:
Якщо введено ім'я користувача, якого потрібно видалити і у користувача є на це права, запис із зазначеним логіном буде видалена з таблиці.
Додавання нового користувача в систему:
При створенні нового користувача, перевіряється, чи має право на такі дії поточний користувач. Всі права користувача визначаються змінними: $ add, $ edit, $ del, $ del_user і $ add_user. Спочатку, все заборонено, тобто, значення змінних рівні false. Отримані дані з форми, визначають нові права користувача. Остання перевірка, на збіг імен в таблиці. Якщо все вказано вірно, то в таблицю auth вноситься новий запис. Тепер напишемо відображення форм, для кожного з оброблюваних дій.
Форма для додавання новини:
Форма редагування новини:
Форма для редагування нічим не відрізняється, від форми додавання. Замість створення нового запису в таблиці, ми змінюємо вже існуючу новина. При завантаженні форми, вона відображається не порожній, а з поточними значеннями полів. При натисканні на кнопку "Змінити новина", нові дані заносяться в таблицю.
Відображення форми не потрібно, так як видалення відбувається при натисканні на посилання «Видалити», яка знаходиться поруч з новиною. Якщо права доступу дозволяють видалення новин, то запис з вказаним id буде видалена з таблиці.
Виведення списку всіх користувачів:
Видалення користувача з системи:
Форма для видалення складається з рядка для введення імені і кнопки "Видалити" (рис. 3).
Трохи складніше буде виглядати форма для створення нового користувача:
Для створення нового користувача в системі, потрібно вказати його логін, пароль, а також права доступу в системі. На малюнку 4 показана відображається при цьому форма.