first commit

This commit is contained in:
brusnitsyn
2026-06-24 17:20:43 +09:00
commit 43499acf1c
165 changed files with 25929 additions and 0 deletions

View File

@@ -0,0 +1,21 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
use WithoutModelEvents;
public function run(): void
{
// Базовая ролевая модель (RBAC, мера УПД.4).
$this->call(RolesAndPermissionsSeeder::class);
// Учётную запись администратора создавайте командой (мера УПД.1):
// php artisan user:create-admin
// Тестовых пользователей в production не создаём.
}
}

View File

@@ -0,0 +1,63 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
use Spatie\Permission\PermissionRegistrar;
/**
* Базовая ролевая модель (RBAC) по разделу 4.2 гайда.
*
* Меры ФСТЭК: УПД.4 (разделение ролей), УПД.5 (наименьшие привилегии),
* разделение обязанностей (оператор работает с ПДн, аудитор только журналы).
*/
class RolesAndPermissionsSeeder extends Seeder
{
public function run(): void
{
app(PermissionRegistrar::class)->forgetCachedPermissions();
$permissions = [
// Работа с персональными данными.
'pdn.view',
'pdn.create',
'pdn.update',
'pdn.delete',
'pdn.export',
// Администрирование пользователей и прав (УПД.13).
'users.manage',
'roles.manage',
// Просмотр журналов аудита.
'audit.view',
];
foreach ($permissions as $permission) {
Permission::findOrCreate($permission, 'web');
}
// super_admin — только для DBA, не выдаётся через веб-интерфейс.
$superAdmin = Role::findOrCreate('super_admin', 'web');
$superAdmin->givePermissionTo(Permission::all());
// admin — управление пользователями, полный доступ к ПДн.
$admin = Role::findOrCreate('admin', 'web');
$admin->givePermissionTo([
'pdn.view', 'pdn.create', 'pdn.update', 'pdn.delete', 'pdn.export',
'users.manage', 'roles.manage',
]);
// operator — работа с ПДн в рамках задач, без управления пользователями.
$operator = Role::findOrCreate('operator', 'web');
$operator->givePermissionTo(['pdn.view', 'pdn.create', 'pdn.update']);
// auditor — только чтение журналов (разделение обязанностей).
$auditor = Role::findOrCreate('auditor', 'web');
$auditor->givePermissionTo(['audit.view']);
// user — доступ только к своим данным.
$user = Role::findOrCreate('user', 'web');
$user->givePermissionTo(['pdn.view']);
}
}