vorst.ru - Как написать блог на Yii2
Статьи из рубрики about-sites

Рефакторинг кода авторизации

Использование аккаунта социальной сети для авторизации

Авторизация с помощью социальной сети не должна зависеть от типа аккаунта. В предыдущем посте используется код, где в конструкторе классa common/components/SocialContact.php выполняется оператор switch. При добавлении обработчика для новой социальной сети, придется дописывать код, при этом меняя класс.

Перепишем конструктор так, чтобы класс не нужно было менять и он не зависел от типов социальных сетей.


Как подключить авторизацию через аккаунт

Авторизация с использованием аккаунта социальной сети

Допустим, что вы уже зарегистрированы в известной социальной сети. То есть вы уже сообщили о себе, все, что считали нужным. Очевидно вам не хочется проходить процедуру еще раз на другом ресурсе.


Комментарии

Как выводить комментарии с отступами?

На сайте оставили комментарий, вы ответили. Оппонент что-то еще уточнил, вы опять ответили. Цепочка из нескольких вопросов/ответов, которую нужно представить в виде лестницы.

  • Подскажите, как организовать комментарии на сайте?
    • Есть варианты. Каковы ваши требования?
      • Необходимо, чтобы юзер мог оставить комментарий, который будет размещен после модерации.
  • Добрый день! У меня такая же проблема.
    • Можно использовать следующий алгоритм ... [Ответить]

В каждом мини-диалоге участвуют двое. Если кто-то еще оставляет комментарий, то это новый мини-диалог. Вклиниться в мини-диалог стороннему комментатору нельзя.


Старт

Модуль для управления блогом

Новости, сообщения, описания - это все статьи, а статьи - это блог. Блог является важной составляющей любого сайта.

Блог настолько важен, что самая популярная CMS на планете WordPress - это блог.

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


Email

Как отправить письмо с сайта, чтобы оно не попало в спам

При создании сайта почти всегда предусматривают форму обратной связи.

Допустим у вас на сайте есть форма обратной связи и посетитель заполнил в ней поле Name и поле Email. Логично отправить сообщение с сайта от имени посетителя на адрес администратора сайта или, например, адрес отдела маркетинга.

Но так отправить сообщение не получится. При отправке сообщения с сайта, нужно чтобы отправитель имел тот-же домен, что и сайт.


Правила

rbac - выполнять действие или нет

В предыдущей статье были определены две роли - Админ и Автор, как в обычном блоге. А обычно блог используется при создании любого сайта. Для ролей Админ и Автор были определены разрешения.

Если вы Админ, то у вас есть общее разрешение create. Оно дает право добавлять данные к любым моделям. Если вы Автор, то такое разрешение давать не стоит. Автор не может, например, добавить новую рубрику.

Если нельзя дать общее разрешение, то нужно создать и выдать частное разрешение. Чтобы позволить Автору добавлять статьи, нужно создать разрешение createPost. Оно должно проверяться следующим, в случае неудачи при проверке разрешения create.

$auth->addChild($createPost, $create);

Чтобы Админ мог добавить статью, нужно, чтобы он имел разрешение на все, на что имеет разрешение Автор.

$auth->addChild($admin, $author);

Все отлично и логично. Четкая иерархия разрешений и ролей. Но, например, вы Автор и пытаетесь редактировать чужую статью. Действие не желательное. Как проверить, что статья не ваша? Или как проверить, что этот комментарий не к вашей статье и вам не стоит на него отвечать?


Разрешения

rbac - разрешения на доступ, роли для групп пользователей

Разработка бекенда сайта часто подразумевает ограничение прав при редактировании контента. Ролевая модель имеет иерархию. Сначала прав не много, потом чуть больше, наконец доступно все. Права (или разрешения) - это константы, которые связаны с конкретной ролью. Если за ролью закреплено разрешение, то действие может быть выполнено.

Проверяется разрешение просто, например:

if(Yii::$app->user->can('update', ['model' => $model])) {
  // code for model updating
}

То есть может быть выполнен некий код, если за ролью текущего Пользователя закреплено разрешение update. Если представить, что с каждой ролью связан массив текстовых констант - "create", "update" и прочее, то правило проверки становится очевидным.

Но при такой организации данных нельзя учесть иерархию разрешений. Нужна древовидная структура. Строится такое дерево с помощью менеджера авторизации.

Определим те разрешения, что были упомянуты в предыдущей статье.


Настройка RBAC

rbac - подключение ролевого доступа

В большом количестве задач необходимо в backend-части приложения разрешать одним группам пользователей выполнять только определенные действия. Другим может быть разрешено чуть больше. И так далее, до админа.

Именно распределение прав для групп пользователей и будет рассмотрено в паре-тройке статей. В качестве примера будет использоваться всего две роли.


Событие

пример события

События бывают разные. Например, привезли хлеб и все, у кого он закончился, потянулись в магазин. То есть выполнили одно и тоже ответное действие. Выдали зарплату и все, естественно, тратят ее по разному.

В первом случае обработчик события один, во-втором их несколько. Пока рассмотрим первый вариант на основе пары предыдущих статей.


Вспомнить все

Если читатель хочет вспомнить, что просмотрено и прочитано

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


Два языка

переводим контент сайта

Для перевода интерфейса в Yii применяется таблица из двух колонок. В первой колонке записываются слова или фразы на английском, во второй - перевод на русском. Строки отсортированы по первой колонке. В тексте программы вместо нужного слова или фразы вызывается функция t('Word or Phrase'). Если текущий язык сайта английский, функция возвращает параметр, иначе соответствующий перевод.

Для контента такой перевод невозможен и, обычно, создается отдельный, полностью переведенный сайт. Но когда автор статьи и переводчик одно лицо, этот подход сложен и не удобен. Проще переводить каждый абзац сразу.


Развитие сайта

Следует за этапами развития компании

Сначала о компании. Выделим, условно конечно же, три этапа.

В начале сотрудников не много, как и клиентов. Возникающие вопросы легко решаются. Они вас не раздражают, наоборот, вы их ждете с нетерпением.

С ростом компании количество проблем растет, появляются стандартные алгоритмы решения. Их знание, накопление нужно и вам и клиентам.

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

А что же сайт?



Поиск



Старт

Модуль для управления блогом

Новости, сообщения, описания - это все статьи, а статьи - это блог. Блог является важной составляющей любого сайта.

Блог настолько важен, что самая популярная CMS на планете WordPress - это блог.

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


    Поделиться

Модуль sergmoro1/yii2-blog-tools позволяет получить готовую функциональность так-же быстро, как и при установке CMS. Что включает эта функциональность?

Управление блогом

Во-первых панель управления (backend), которую легко расширять и настраивать. Для панели используется bootstrap шаблон SB-admin.

Во-вторых, набор таблиц, которыми можно управлять с помощью этой панели:

  • Статьи
  • Рубрики
  • Метки
  • Комментарии
  • Авторы
  • Пользователи

Пользователь, это тот, кто отвечает за редактирование контента. Чтобы стать Пользователем надо пройти регистрацию.

Автор, это тот, кто придумал статью. Автора указывать не обязательно, если авторство не важно. Авторов у статьи может быть несколько.

Комментарии могут оставлять зарегистрированные посетители сайта. Комментарии проверяются администратором сайта. Администратор имеет возможность ответить на комментарий. В этом случае Пользователь, разместивший комментарий, может продолжить диалог.

Метки это слова, которыми помечаются статьи для быстрой навигации во frontend. Метки можно менять и тогда они будут заменены во всех связных статьях.

Рубрики организованы в виде Вложенного Множества или Nested Sets и могут иметь любое количество уровней вложенности.

Наконец Статьи. При редактировании используется wysiwyg редактор imperavi с уже настроенной возможностью закачивать файлы, изображения и управлять ими. Кроме того, с каждой статьей можно связать несколько изображений, которые потом можно использовать во frontend, например для организации слайдера.

SEO

К блогу подключены SEO инструменты, позволяющие определять любое количество мета-тегов. Значения мета-тегов определяются при редактировании статей.

Настройка

После установки модуля sergmoro1/yii2-blog-tools и его настройки в соответствии с README.md в файле /backend/config/params.php будет определение sidebar меню. Определение может быть расширено или изменено.

Могут быть изменены и другие параметры backend. Например, можно полностью поменять основной layout, разместив его в обычном месте backend/views/layouts вместо указанного в README.md.

return [
  'id' => 'app-backend',
  'basePath' => dirname(__DIR__),
  'defaultRoute' => '/blog/site/index',
  'layoutPath' => '@vendor/sergmoro1/yii2-blog-tools/src/views/layouts',

Авторизация

Модуль включает контроль доступа. Предусмотрено три роли - Администратор, Автор и Комментатор.

Комментатор может оставлять комментарии на сайте и редактировать свой профиль. Права Комментатора получает любой зарегистрировавшийся Пользователь. Автор может размещать статьи и отвечать на комментарии к своим статьям. Администратор может все. Права Администратора может выдать только Администратор. Администратор может блокировать любого Пользователя.

Заключение

Модуль sergmoro1/yii2-blog-tools предназначен для быстрой организации backend. Все модели и часть виджетов могут и должны использоваться во frontend.

Оставить комментарий

Только авторизованные пользователи могут оставлять комментарии. Пожалуйста авторизуйтесь или пройдите регистрацию.