<MyRusakov.ru />

Фреймворк Yii 2.0 с нуля. Пример создания сайта

Фреймворк Yii 2.0 с нуля. Пример создания сайта

Видеокурс "Фреймворк Yii 2.0 с нуля. Пример создания сайта" обучит Вас созданию профессиональных сайтов с использованием фреймворка Yii. В курсе есть 2 раздела: теоретический и практический. В теоретическом разделе будут разобраны возможности фреймворка Yii с примерами их использования, а в практической части будет создан сайт Blog.MyRusakov.ru с помощью полученных знаний из теоретического раздела.

Так же почти ко всем урокам идут упражнения для закрепления материала из урока на практике.

После прохождения курса Вы без труда сможете создавать любые сайты с использованием фреймворка Yii, причём делать это будете быстро и качественно.

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

Форум сайта MyRusakov.ru

Админ-панель
21.08.2015 12:41:59 Админ-панель Сообщение #1
(Алекс)

(Алекс)

Эксперт

Эксперт

Дата регистрации:
21.06.2013 14:56:26

Сообщений: 114

Здравствуйте.
Суть вопроса такова: делаю админ-панель для сайта (сайт на самописном движке по типу того, который был создан в курсе  "Создание движка на PHP и MySQL 2.0" ). Там есть достаточно полезный класс Request, который получает данные из запросов и делает их безопасными. Если мы в этом классе обработаем данные, скажем, из формы добавления статьи, то всё html-форматирование (все примененные теги, для придания нужного вида) пропадет, так как там присутствует функция htmlspecialchars() Если ее убрать, то, по-идее, админка не потеряет в безопасности?
Еще вопрос по авторизации. Мне кажется, что в случае админ-панели, наверное, не стоит заходить в БД и проверять наличие пользователя-админа, а просто вынести эти данные в константы в тот же Config, чтоб лишний раз не нагружать сервер. Правильно ли так делать или нет?
Профиль Ответить
23.08.2015 00:46:54 Админ-панель Сообщение #2
gemiks

gemiks

Мастер

Мастер

Дата регистрации:
17.03.2013 18:03:11

Сообщений: 176

По первому вопросу, админка никак не потеряет в безопасности, так как только админ будет грузить html код и прочее, он ведь не будет сам себе вредить.

Второй вопрос, если вы используете один и тот же клас request для сайта и для админки, тогда сам сайт будет уязвим.

Насчет админа, вы ведь понимаеет, что такой вариант сработает только для одно админа, а если добавить еще одного? Да можно сделать массив с логинами и паролями админов, но.. Вообще я бы сделал у каждого юзера в базе ячейку типу status и туда ставил или 0 простой юзер или 1 админ, занес бы в сессию, и потом это значение сверял и разрешал бы доступ к админке (это не такая уж и сильная нагрузка)
Профиль Ответить
23.08.2015 15:34:55 Админ-панель Сообщение #3
(Алекс)

(Алекс)

Эксперт

Эксперт

Дата регистрации:
21.06.2013 14:56:26

Сообщений: 114

Спасибо большое за ответ. По-поводу Request, используются разные классы.
По-поводу нескольких админов, я уже тоже подумал на счет этого, это, действительно, не удобно из-за того, что придется вручную расширять массив с админами.
Еще один вопрос, по-поводу организации сессий. Где лучше всего начинать сессии: в файле index.php или где-нибудь еще? Когда я смотрел уроки из видео курса по созданию движка, то в файле index.php не было старта сессий.
Профиль Ответить
23.08.2015 20:42:23 Админ-панель Сообщение #4
gemiks

gemiks

Мастер

Мастер

Дата регистрации:
17.03.2013 18:03:11

Сообщений: 176

По курсу, сессии начинались там где ими пользовались, то есть была такая конструкция if(!session_id()) session_start();То есть мы проверяем, была ли начата сессия, если нет, то начинаем её.
Как по мне это хороший вариант.
Профиль Ответить
25.08.2015 11:16:39 Админ-панель Сообщение #5
(Алекс)

(Алекс)

Эксперт

Эксперт

Дата регистрации:
21.06.2013 14:56:26

Сообщений: 114

я тоже делаю так, но, почему то, если не указать эту конструкцию в index-файле, то сессии не работают.
Профиль Ответить
28.08.2015 12:26:33 Админ-панель Сообщение #6
gemiks

gemiks

Мастер

Мастер

Дата регистрации:
17.03.2013 18:03:11

Сообщений: 176

Можете привести код в качестве примера
Профиль Ответить
28.08.2015 13:42:43 Админ-панель Сообщение #7
(Алекс)

(Алекс)

Эксперт

Эксперт

Дата регистрации:
21.06.2013 14:56:26

Сообщений: 114

index.php

set_include_path(get_include_path().PATH_SEPARATOR.'core'.PATH_SEPARATOR.'modules'.
PATH_SEPARATOR.'controllers'.PATH_SEPARATOR.'library'.PATH_SEPARATOR.'validators' );
spl_autoload_extensions('_class.php' );
spl_autoload_register();

$router = new Router();
UserController_class.php
class UserController extends MainController {
public function auth() {
if (!session_id()) session_start();
if (isSet($_POST['auth_button'])) {
$user = new User();
$user->auth();
}
parent::redirect($_SERVER['HTTP_REFERER']);
}
public function logout() {
if (!session_id()) session_start();
$user = new User();
$user->logout();
parent::redirect($_SERVER['HTTP_REFERER']);
}
}
User_class.php
 class User {
private $login = '';
private $password = '';
public function __construct() {
$request = new Request();
$this->login = $request->getDataByName('login' );
$this->password = md5($request->getDataByName('password' ));
}
private function getUserFromDB() {
$params = array(
'where' => $this->getWhere(),
'result' => 'row',
'table' => 'users',
'field' => '',
'colname' => '',
'value' => '',
'start' => 0,
'limit' => 0,
'order' => false
);
$db = DataBase::getDBO();
return $db->select($params);
}
public function auth() {
if (isSet($_POST['auth_button'])) {
$user_data = $this->getUserFromDB();
if (!empty($user_data)) {
$_SESSION['login'] = $user_data['login'];
$_SESSION['password'] = $user_data['password'];
$_SESSION['avatar'] = $user_data['photo'];
$_SESSION['error_auth'] = 0;
}
else $_SESSION['error_auth'] = 1;
}
}
public function logout() {
if (!session_id()) session_start();
unset($_SESSION['login']);
unset($_SESSION['error_auth']);
unset($_SESSION['password']);
}
private function getWhere() {
return " WHERE `login` = '".$this->login."' AND `password` = '".$this->password."'";
}
}
Массив Сессий проверил, там есть пользователь. Но на странице, вместо приветствия, выводится ошибка, неправильные данные (У меня она появляется, если  $_SESSION['error_auth'] == 1)
Профиль Ответить
28.08.2015 13:45:15 Админ-панель Сообщение #8
(Алекс)

(Алекс)

Эксперт

Эксперт

Дата регистрации:
21.06.2013 14:56:26

Сообщений: 114

P.S. пробелы поле кавычки, перед скобкой поставил, чтоб не раздражала замена на картинку
Профиль Ответить
28.08.2015 18:23:14 Админ-панель Сообщение #9
gemiks

gemiks

Мастер

Мастер

Дата регистрации:
17.03.2013 18:03:11

Сообщений: 176

Как я понял, у вас ошибка в методе auth в User_class.php 

Вы проверяете не пустой ли массив, но эта функция может не корректно сработать, попробуйте проверить какое-то определенное значение типу if(isset($user_data['login'])) то мы записываем в сессию.
Профиль Ответить
29.08.2015 16:10:09 Админ-панель Сообщение #10
(Алекс)

(Алекс)

Эксперт

Эксперт

Дата регистрации:
21.06.2013 14:56:26

Сообщений: 114

Да, спасибо, помогло. Проблему решил.
Профиль Ответить