/HWX

Some mysterious repo nobody should see

Primary LanguagePHP

Домашнее задание

Подготовка

  1. Взять результат выполнения предыдущей домашней работы (Models).
  2. Подключить REST API из соответствующего домашнего задания
    1. Привести набор полей в соответствие с ДЗ models.
    2. Использовать manager из ДЗ Models.
    3. Расположить контроллеры в подпапке Api.
  3. Подключить страницы из домашнего задания по Views and Forms.
    • Для форм создания и редактирования машины нужно будет добавить select с пользователями.
  4. Создать по роуту “/” главную страницу, содержащую текст: Best Car Hire Deals.

Задание 1

Добавить возможность регистрации новых пользователей и аутентификации с помощью email и password.

  1. Сгенерировать командой основные файлы
  2. Расширить класс App\Entity\User
  3. Адаптировать стандартные форму и контроллер под набор полей
  4. После аутентификации показывать пользователю страницу со списком машин.
  5. Закрыть доступ ко всем страницам кроме главной для пользователей, не прошедших аутентификацию.

Задание 2

Добавить возможность аутентификации через социальную сеть или сервис, например, Фейсбук (Socialite, SocialiteProviders, etc.) Для этого нужно будет зарегистрировать приложение на используемом ресурсе и использовать предоставленные ключи внутри Laravel приложения.

Задание 3

Реализовать механизм авторизации с помощью ролей.

  • Ролей должно быть 2: обычный пользователь и администратор.

  • Для хранения роли нужно создать миграцию для таблицы [users]: добавить флаг is_admin.

  • Права доступа:

    1. Для страниц приложения:
      • Пользователь должен иметь доступ к страницам списка машин и отдельной машины.
      • Пользователь не должен видеть контролы для редактирования, удаления и добавления машины.
      • Пользователь не должен иметь доступа к соответствующим роутам.
      • Администратор должен видеть контролы для редактирования, удаления и добавления машины и иметь доступ к соответствующим роутам.
      • В случае попытки неавторизованного доступа - перенаправлять на главную (/).
    2. Для API:
      • Роуты /api/cars должны быть доступны для всех аутентифицированых пользователей.
      • Действия роутов /api/admin/cars/ должны быть доступны только для администратора.
      • В случае попытки неавторизованного доступа - возвращать response с кодом 403.
  • Контроль прав доступа нужно было реализовать в классах Policy так, чтобы каждому классу модели соответствовала своя Policy.

  • Реализованные полиси должны описывать доступ к действиям пользователя (например, post.create), а не наличие роли администратора. Проверка критерия предоставления доступа (в нашем случае - роли) должна происходить в методах класса полиси. То есть в контроллерах в итоге должна быть проверка типа

    if (Gate::denies(‘create', $post)) ...
    

    вместо

    if (Gate::denies(‘isAdmin', $post)) …
    

Дополнительно

Если все успеете, в README проекта вместо задания добавьте полную инструкцию по развертыванию проекта и запуску тестов.

Запуск тестов

  1. Создайте APP_URL в .env

  2. Запустите тесты

    php artisan dusk
    

Запуск тестов c Homestead

  1. Зайдите на виртуальную машину через ssh из папки, где установлен Homestead

    vagrant ssh
    
  2. Запустите следующие команды перед запуском тестов

    wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
    
    sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list'
    
    sudo apt-get update && sudo apt-get install -y google-chrome-stable
    
    sudo apt-get install -y xvfb
    
  3. В отдельном окне терминала:

    Xvfb :0 -screen 0 1280x960x24 &
    
  4. Теперь можно запустить тесты.

    php artisan dusk
    

Система оценивания

Каждое из заданий - 3 балла.

Хороший README - +1 балл.

Примеры из лекции доступны здесь: https://github.com/Antarus66/Auth-samples