Files
onboard/database/seeders/PermissionAndRoleSeeder.php
brusnitsyn 739168d427 Обновлен стартовый экран
Переписаны запросы для статистики, отчетов
Добавлена интеграция отчета сестры
2026-05-28 22:10:00 +09:00

105 lines
4.5 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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',
]);
}
}