#doctrine-orm #doctrine
Вопрос:
У меня есть схема данных, которая не очень сложна, но я действительно не вижу, как адаптировать ее к сущностям для Symfony …
Мне нужно настроить этот дизайн базы данных на Symfony:
Пользователь, имеющий доступ к одному или нескольким инструментам, обязательно имеет уникальную роль для каждого инструмента, к которому у него есть доступ.
На symfony я создал 3 сущности (Пользователь, Инструмент и Роль) без атрибута отношений, затем я создал сущность доступа, которая содержит отношения с 3 сущностями. Вот сущность доступа:
class Access { / ** * @ORM Id * @ORM GeneratedValue * @ORM Column (type = "integer") * / private $ id; / ** * @ORM ManyToMany (targetEntity = User :: class, inversedBy = "accesses") * / private $ login; / ** * @ORM ManyToMany (targetEntity = Tool :: class, inversedBy = "accesses") * / private $ tool; / ** * @ORM ManyToOne (targetEntity = Role :: class, inversedBy = "accesses") * @ORM JoinColumn (nullable = false) * / private $ role; // some function like construct, getters and setters
Нужна ли мне эта сущность доступа?
Как соблюдать предыдущее правило управления?
Я хотел бы построить его чистым способом с помощью правильных методов, связанных с symfony.
Ответ №1:
В symfony роли устанавливаются для пользователя и извлекаются с помощью getRoles
метода для сущности пользователя.
Если вы хотите иметь роль в разных инструментах, вам придется перезаписать этот метод getRoles
Однако при каждом изменении роли это приведет к отключению пользователя. (Пользователь должен будет ввести учетные данные при изменении платы за проезд)
Если это вас устраивает, вы можете управлять им, используя только 3 таблицы: пользователь/роль/инструмент
Когда пользователь вошел в систему, вы можете отобразить все доступные инструменты (пользователь -gt; роли -gt;gt; инструмент для каждой роли).
Когда пользователь выбирает инструменты для доступа к ним, установите роль пользователя (в сущности пользователя есть столбец роли, который будет обновляться в зависимости от используемых инструментов).
Комментарии:
1. Спасибо за ваше предложение. Пользователь может захотеть сменить инструмент, чтобы переключиться на инструмент, в котором у него другая роль (например, инструмент, в котором он является администратором, на инструмент, в котором он ничего не может изменить). Я хочу, чтобы пользователь мог простым способом изменять инструменты. Если пользователю необходимо выйти из системы для переключения ролей (чтобы получить роль для инструмента), это не совсем подходящее решение для меня. Я разрабатываю платформу, на которой пользователь один раз входит в систему, чтобы получить доступ к своим инструментам, я не хочу, чтобы они выходили из системы, чтобы переключаться с одного инструмента на другой среди инструментов, к которым у них есть доступ.