Files
movies/database/seeders/RolesAndPermissionsSeeder.php
2026-03-07 13:29:50 +02:00

85 lines
3.0 KiB
PHP

<?php
namespace Database\Seeders;
use App\Models\Permission;
use App\Models\Role;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class RolesAndPermissionsSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
// Create permissions
$permissions = [
['name' => 'View Movies', 'slug' => 'view-movies', 'description' => 'Can view movies'],
['name' => 'Create Movies', 'slug' => 'create-movies', 'description' => 'Can create new movies'],
['name' => 'Edit Movies', 'slug' => 'edit-movies', 'description' => 'Can edit existing movies'],
['name' => 'Delete Movies', 'slug' => 'delete-movies', 'description' => 'Can delete movies'],
['name' => 'Manage Users', 'slug' => 'manage-users', 'description' => 'Can manage users'],
['name' => 'Manage Roles', 'slug' => 'manage-roles', 'description' => 'Can manage roles and permissions'],
['name' => 'Moderate Content', 'slug' => 'moderate-content', 'description' => 'Can moderate user content'],
];
foreach ($permissions as $permission) {
Permission::firstOrCreate(['slug' => $permission['slug']], $permission);
}
// Create roles
$adminRole = Role::firstOrCreate(
['slug' => 'admin'],
['name' => 'Administrator', 'description' => 'Full access to all features']
);
$moderatorRole = Role::firstOrCreate(
['slug' => 'moderator'],
['name' => 'Moderator', 'description' => 'Can moderate content and manage movies']
);
$userRole = Role::firstOrCreate(
['slug' => 'user'],
['name' => 'User', 'description' => 'Regular user with basic access']
);
// Assign permissions to admin (all permissions)
$allPermissions = Permission::all();
foreach ($allPermissions as $permission) {
if (!$adminRole->hasPermission($permission)) {
$adminRole->permissions()->attach($permission->id);
}
}
// Assign permissions to moderator
$moderatorPermissions = Permission::whereIn('slug', [
'view-movies',
'create-movies',
'edit-movies',
'delete-movies',
'moderate-content',
])->get();
foreach ($moderatorPermissions as $permission) {
if (!$moderatorRole->hasPermission($permission)) {
$moderatorRole->permissions()->attach($permission->id);
}
}
// Assign permissions to user
$userPermissions = Permission::whereIn('slug', [
'view-movies',
])->get();
foreach ($userPermissions as $permission) {
if (!$userRole->hasPermission($permission)) {
$userRole->permissions()->attach($permission->id);
}
}
$this->command->info('Roles and permissions seeded successfully!');
}
}