forgetCachedPermissions(); // --- Права --- $permissions = [ // Сводный отчёт (дежурный) 'report.create' => 'Создание сводного отчёта', 'report.edit' => 'Редактирование сводного отчёта (текущий период)', 'report.edit.past' => 'Редактирование сводного отчёта за прошлые периоды (+ нежелательные события, пациенты на контроле)', 'report.view' => 'Просмотр отчётов', // Журнал пациентов (мед. сестра) 'nurse.report.view' => 'Просмотр журнала пациентов', 'nurse.report.create' => 'Создание и редактирование журнала пациентов', 'nurse.report.edit.past' => 'Редактирование журнала пациентов за прошлые периоды', // Общее 'stats.view' => 'Просмотр статистики', 'users.manage' => 'Управление пользователями', 'roles.manage' => 'Управление ролями и правами', 'metrics.manage' => 'Управление метриками', ]; foreach ($permissions as $name => $label) { Permission::firstOrCreate(['name' => $name]); } // --- Роли (slug совпадает со slug в App\Models\Role) --- $admin = Role::firstOrCreate(['name' => 'admin']); // Администратор $gv = Role::firstOrCreate(['name' => 'gv']); // Главный врач $zam = Role::firstOrCreate(['name' => 'zam']); // Зам. глав. врача $zav = Role::firstOrCreate(['name' => 'zav']); // Заведующий отделением $dej = Role::firstOrCreate(['name' => 'dej']); // Врач-дежурный $nurse = Role::firstOrCreate(['name' => 'nurse']); // Старшая мед. сестра // --- Назначение прав --- $admin->syncPermissions(array_keys($permissions)); // Главный врач: полный доступ к отчётам, статистике, метрикам $gv->syncPermissions([ 'report.create', 'report.edit', 'report.edit.past', 'report.view', 'nurse.report.view', 'nurse.report.create', 'nurse.report.edit.past', 'stats.view', 'metrics.manage', ]); // Зам. главного врача: то же что и главный врач $zam->syncPermissions([ 'report.create', 'report.edit', 'report.edit.past', 'report.view', 'nurse.report.view', 'nurse.report.create', 'nurse.report.edit.past', 'stats.view', 'metrics.manage', ]); // Заведующий отделением: создание/редактирование отчётов своего отделения $zav->syncPermissions([ 'report.create', 'report.edit', 'report.edit.past', 'report.view', 'nurse.report.view', 'nurse.report.create', 'nurse.report.edit.past', 'stats.view', ]); // Врач-дежурный: создание сводного + просмотр журнала (без редактирования) $dej->syncPermissions([ 'report.create', 'report.edit', 'report.view', 'nurse.report.view', ]); // Старшая мед. сестра: журнал пациентов (создание и просмотр) $nurse->syncPermissions([ 'report.view', 'nurse.report.view', 'nurse.report.create', ]); } }