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