Урок 5_5 Видимость кнопок по разрешениям "can", "canany". Связь пользователь-роль-разрешения.
#laravel #laravel12 #УрокиLaravel #MVC #php #CRUD #webdevelopment #Spatie #Role #Permission #Blade 📄 Текстовое описание урока 5_5: https:// github.com/AS7go/la12sail1/blob/lesson_05_5/w_Lessons_Doc/Lesson5_5.txt 🔗 GitHub: https:// github.com/AS7go/la12sail1/tree/lesson_05_5 В этом уроке: Обернем кнопки в @can, @canany для управления видимостью с привязкой к разрешениям. Создадим нового пользователя, которому автоматически присвоится роль "user" Посмотрим роли и разрешения в действии. Опишем таблицы и их взаимосвязи. Рассмотрим связи на примере таблиц "users", "role_has_permissions", "model_has_roles", "roles", "permissions" : Один ко многим ("One-to-Many") Многие ко многим ("Many-to-Many") Описание таблиц в базе данных: cache: Хранит кэшированные данные приложения для ускорения доступа. cache_locks: Используется для предотвращения состояния гонки при работе с кэшем. failed_jobs: Содержит информацию о неудавшихся заданиях очереди. jobs: Очередь заданий для асинхронной обработки задач. job_batches: Отслеживает выполнение пакетов заданий очереди. migrations: История примененных миграций базы данных. posts: Содержит записи постов с полями id, name и text. permissions: Список разрешений, используемых в системе. roles: Список ролей пользователей в системе. model_has_roles: Связывает модели (например, пользователей) с ролями. model_has_permissions: Связывает модели (например, пользователей) с отдельными разрешениями. role_has_permissions: Связывает роли с набором разрешений. sessions: Информация об активных сессиях пользователей. password_reset_tokens: Токены для восстановления паролей пользователей. users: Учетные записи пользователей (ID, имя, email, хешированный пароль). Взаимосвязи таблиц для управления ролями и разрешениями (Spatie Laravel Permission) 1. "users" к "roles" (через "model_has_roles") Связь: Многие ко многим ("Many-to-Many") Как работает: Один пользователь может иметь несколько ролей, и одна роль может быть назначена множеству пользователей. Промежуточная таблица: "model_has_roles". Содержит внешний ключ "model_id" (ссылается на "id" в "users") и "role_id" (ссылается на "id" в "roles"). "model_type" указывает на тип модели ("App\Models\User"). 2. "roles" к "permissions" (через "role_has_permissions") Связь: Многие ко многим ("Many-to-Many") Как работает: Одна роль может иметь несколько разрешений, и одно разрешение может быть присвоено множеству ролей. Промежуточная таблица: "role_has_permissions". Содержит внешний ключ "role_id" (ссылается на "id" в "roles") и "permission_id" (ссылается на "id" в "permissions"). Это ядро системы, определяющее, какие разрешения связаны с каждой ролью. 3. "users" к "permissions" (напрямую через "model_has_permissions") Связь: Многие ко многим ("Many-to-Many") Как работает: Пользователю можно напрямую присваивать индивидуальные разрешения, минуя роли. Промежуточная таблица: "model_has_permissions". Содержит внешний ключ "model_id" (ссылается на "id" в "users") и "permission_id" (ссылается на "id" в "permissions"). 4. "users" к "model_has_roles" Связь: Один ко многим ("One-to-Many") Как работает: Каждый пользователь ("users.id") может иметь много записей в таблице "model_has_roles", каждая из которых назначает ему определённую роль. 5. "roles" к "model_has_roles" Связь: Один ко многим ("One-to-Many") Как работает: Каждая роль ("roles.id") может быть связана с множеством записей в таблице "model_has_roles", каждая из которых назначает эту роль конкретному пользователю. 6. "permissions" к "role_has_permissions" Связь: Один ко многим ("One-to-Many") Как работает: Каждое разрешение ("permissions.id") может быть связано с множеством записей в таблице "role_has_permissions", каждая из которых присваивает это разрешение определённой роли. 7. "roles" к "role_has_permissions" Связь: Один ко многим ("One-to-Many") Как работает: Каждая роль ("roles.id") может быть связана с множеством записей в таблице "role_has_permissions", каждая из которых назначает этой роли определённое разрешение. Итого: Таблицы "model_has_roles" и "role_has_permissions" являются ключевыми промежуточными таблицами, которые обеспечивают гибкие связи "многие ко многим", позволяя пользователям иметь несколько ролей, а ролям - несколько разрешений. Разрешения также могут быть напрямую привязаны к пользователям.