first commit
This commit is contained in:
21
database/seeders/DatabaseSeeder.php
Normal file
21
database/seeders/DatabaseSeeder.php
Normal 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 не создаём.
|
||||
}
|
||||
}
|
||||
63
database/seeders/RolesAndPermissionsSeeder.php
Normal file
63
database/seeders/RolesAndPermissionsSeeder.php
Normal 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']);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user