Files
laravel-gost-template/database/seeders/RolesAndPermissionsSeeder.php
2026-06-24 17:20:43 +09:00

64 lines
2.5 KiB
PHP
Raw Permalink 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;
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']);
}
}