На Symfony 3.4 написать систему динамических ролей.

Сущности

В приложении должно быть 3 типа сущностей:

  1. Пользователи
  2. Проекты
  3. Роли

Страницы

  1. Авторизация

  2. Администраторская панель *

    Сюда пользователь попадает, если у него есть администраторская роль.

    Здесь 3 раздела:

    1. Пользователи

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

    2. Роли

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

      1. Может смотреть все проекты или можно выбрать из перечня проектов, если они уже существуют в системе
      2. Может редактировать все проекты или можно выбрать из перечня проектов, если они уже существуют в системе
    3. Проекты Можно добавлять, редактировать, удалять проекты. У проекта 2 редактируемых поля: название и описание, created_at и updated_at.

  3. Список проектов

    Сюда обычные пользователи попадают после авторизации. По умолчанию пользователь не имеет доступ к проектам. Он может просматривать и редактировать только в том случае, если к нему привязана роль, которая это позволяет делать и только те проекты, которые прописаны в роли. То, как создавать эти роли написано в пункте 2 про Администраторскую панель.

Заметки

Дизайн вообще не важен, поэтому все минимально. Так, что можно было просто покликать и проверить работу.

Стоит учитывать, что в будущем могут появиться еще сущности, подобные Проектам и в разделе Роли в Администраторской панели выбирать что именно пользователь, которому назначена эта роль, может делать над данными сущностями, к каким конкретно он имеет доступ и т.п. То есть стоит держать это в голове и делать приложение гибким для таких будущих изменений.

Администраторская роль - системная, никто её не создает, она зашита в коде.

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

** Пункт, который отмечен звездочкой (визуальная админская часть) - бонусный, визуальную составляющую можно не делать, главное иметь необходимую логику сущностей в коде.*