На предыдущем шаге было сделано добавление записей в блог, но эта возможность доступна любому с улицы. Необходимо добавить авторизацию для блога, чтобы эта функция была доступна только админу. Для поддержки авторизации будет задействован механизм сессий, который позволяет сохранять массивы данных пользователя между обращнения к разным скриптам. В Codeigniter предусмотрена библиотека, облегчающая работу с эти механизмом. Существуют так же целый ряд готовых решений и библиотек с расширенными возможностями авторизации, но для простейшего блога мы можем написать и сами.
1.
Выведем на главную страницу блога ссылки залогинивания, разлогинивания и добавления записи. Для этого дорабатываем вьюер блога /system/application/views/blog_view.php.
<html>
<body>
<?
foreach ($query-> result() as $row)
{
echo "<h1> ".$row-> title."</h1> ";
echo "<p> ".$row-> body."</p> ";
echo anchor('blog/comments/'.$row-> id,'comments');
}
echo "<p> ".anchor('admin/login','logon')."
";
echo anchor('admin/logoff','logoff')."
";
echo anchor('admin/record_add','new record')." </p> ";
?>
</body> |
2.
создаем контроллер администрирования /system/application/controller/admin.php
<?php
class Admin extends Controller {
function Admin()
{
parent::Controller();
$this-> load-> helper('url');
$this-> load-> helper('form');
// подключаем библиотеку поддержки сессий
$this-> load-> library('session');
}
}
?> |
3.
Переносим функцию добавления записей в блог из контроллера блога контроллере /system/application/controller/blog.php
в контроллер администрирования /system/application/controller/admin.php
function record_add()
{
if (isset($_POST)) if (isset($_POST['title'])) // проверяем были ли отосланы данные формы
{
$this-> db-> insert('records',$_POST); // записываем данные формы
redirect(''); // редирект в начало
} else // если данных нет - выводим форму для добавления новой записи в блог
$this-> load-> view('record_add');
} |
Исправляем вьюер /system/application/views/record_add.php
в нем находим строку:
echo form_open('blog/record_add');
и заменяем ее на
echo form_open('admin/record_add');
4.
Создаем пустую функцию залогинивания в контроллере администрирования /system/application/controller/admin.php
function login()
{
$this-> load-> view('login');
} |
5.
создаем вьюер для залогинивания /system/application/views/login.php.
<html>
<head>
<title> </title>
</head>
<body>
<? echo form_open('admin/login');?>
<input type="text" id="login" name="login" value="guest"/>
<input type="text" id="password" name="password" value="guest"/>
<input type="submit"/>
<? echo form_close(); ?>
</body>
</html> |
6.
Проверяем вывод формы для залогинивания http://ci/admin/login и добавления записи в блог http://ci/admin/record_add
7.
Теперь необходимо перекрыть возможность доступа к функциям администрирования без логина.
для этого дорабатываем конструктор контроллера администрирования /system/application/controller/admin.php
function Admin()
{
parent::Controller();
$this-> load-> helper('url');
$this-> load-> helper('form');
$this-> load-> library('session');
// проверяем наличие принака залогинивания в сессии
// если залогинились - выполняем вызванную функцию
if ($this-> session-> userdata('logon') != '') return;
// переход к обработке логина
if ($this-> uri-> segment(2)==='login') return;
// редирект на логин, если залогинивания не было
redirect('admin/login');
} |
запускаем скрипт добавления записи в блог http://ci/admin/record_add и обнаруживаем, что доступ закрыт - перебрасывает на залогинивание.
8.
Дорабатываем функцию обработки логина
function login()
{
if (isset($_POST['password'])) // проверяем был ли прислан пароль
// проверяем корректность пароля и логина
// Ахтунг! В реальном скрипте пароль в явном виде не должен присутствовать.
if ($_POST['password']==='guest')
if ($_POST['login']==='guest')
{
$session_data = array('logon' => 'Yes!'); // записываем в сессию признак логона
$this-> session-> set_userdata($session_data);
redirect(''); // редирект на главную страницу
}
$this-> load-> view('login');
} |
Заходим http://ci/admin/login. Залогиниваемся "guest/guest" снова проверяем добавление записи в блог http://ci/admin/record_add и убеждаемся,что доступ открыт.
9.
Теперь в контроллер администрирования необходимо добавить функцию разлогинивания - выхода из редакторского режима.
function logoff()
{
$this-> session-> sess_destroy(); // обнуляем сессию
redirect(''); // редирект на главную страницу
} |
вызываем ее в броузере http://ci/admin/logoff происходит уничтожение сессии и редирект на главную страницу.
Снова переходим на страницу добавления записи http://ci/admin/record_add Убеждаемся,что разлогинивание произошло
10.
Все что сделано выложена в папке step4. К этому можно добавить оформление блога. Пример с оформлением находится в папке - step4a