Как спроектировать многоходовую связь, объединенную в laravel?

#laravel #database-design #eloquent

#laravel #database-design #красноречивый

Вопрос:

Таблицы:

  • (Group) {group_id}
  • (User) {user_id}
  • (Разрешение) {permission_id}

Я хочу установить разрешения, которые применяются к группе (всем пользователям) и конкретному пользователю (в группе). Смотрите ERD ниже.

Я мог бы, конечно, создать две таблицы:

  • (Group_Permission) {group_id, permission_id}
  • (Group_User_permissions) {group_id, permission_id, user_id разрешений_id}

Или я мог бы создать одну таблицу:

  • (Group_User_permissions) {group_id, permission_id, user_id разрешений_id}

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

Интересно, есть ли более элегантное решение для этого в laravel .

ERD

Ответ №1:

ИМХО, я бы создал эти отношения:

  1. Пользователь -> Многие ко многим -> Группа
  2. Группа -> Многие ко многим -> Разрешение

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

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

Вы можете найти ссылки на взаимосвязи, используемые выше, в документации laravel.

Надеюсь, это могло бы помочь.

Комментарии:

1. Таким образом, вы не можете указать, у какого пользователя какие разрешения в какой группе, верно?