105 lines
4.5 KiB
PHP
105 lines
4.5 KiB
PHP
<?php
|
||
|
||
namespace Database\Seeders;
|
||
|
||
use Illuminate\Database\Seeder;
|
||
use Spatie\Permission\Models\Permission;
|
||
use Spatie\Permission\Models\Role;
|
||
|
||
class PermissionAndRoleSeeder extends Seeder
|
||
{
|
||
public function run(): void
|
||
{
|
||
// Сброс кэша перед изменениями
|
||
app()[\Spatie\Permission\PermissionRegistrar::class]->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',
|
||
]);
|
||
}
|
||
}
|