inspiren-sem-tool/database/seeders/RoleSeeder.php

65 lines
4.1 KiB
PHP

<?php
namespace Database\Seeders;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;
use Illuminate\Database\Seeder;
use Spatie\Permission\PermissionRegistrar;
class RoleSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
app(PermissionRegistrar::class)->forgetCachedPermissions();
$permissions = [
['name' => 'dashboard.view', 'group' => 'Dashboard', 'description' => 'View dashboard'],
['name' => 'google-ads.accounts.view', 'group' => 'Google Ads Accounts', 'description' => 'View Google Ads accounts'],
['name' => 'google-ads.accounts.sync', 'group' => 'Google Ads Accounts', 'description' => 'Sync Google account records'],
['name' => 'google-ads.accounts.update', 'group' => 'Google Ads Accounts', 'description' => 'Update Google Ads account assignment details'],
['name' => 'google-ads.activities.create', 'group' => 'Google Ads Activities', 'description' => 'Create account activities'],
['name' => 'google-ads.activities.update', 'group' => 'Google Ads Activities', 'description' => 'Update account activities'],
['name' => 'google-ads.activities.complete', 'group' => 'Google Ads Activities', 'description' => 'Mark account activities as complete'],
['name' => 'google-ads.activities.delete', 'group' => 'Google Ads Activities', 'description' => 'Delete account activities'],
['name' => 'google-ads.import', 'group' => 'Google Ads Accounts', 'description' => 'Import Google Ads data'],
['name' => 'google.reports.view', 'group' => 'Google Reports', 'description' => 'View Google campaign reports'],
['name' => 'client-invoices.create', 'group' => 'Client Invoices', 'description' => 'Create client invoices'],
['name' => 'client-invoices.create-client', 'group' => 'Client Invoices', 'description' => 'Create clients from pending invoices'],
['name' => 'client-invoices.update', 'group' => 'Client Invoices', 'description' => 'Update client invoices'],
['name' => 'client-invoices.approve', 'group' => 'Client Invoices', 'description' => 'Approve client invoices'],
['name' => 'client-invoices.delete', 'group' => 'Client Invoices', 'description' => 'Delete client invoices'],
['name' => 'client-invoices.view-pdf', 'group' => 'Client Invoices', 'description' => 'View invoice PDF'],
['name' => 'clients.adjustments.create', 'group' => 'Client Adjustments', 'description' => 'Create client invoice adjustments'],
['name' => 'clients.adjustments.delete', 'group' => 'Client Adjustments', 'description' => 'Delete client invoice adjustments'],
['name' => 'management.roles.view', 'group' => 'Role Management', 'description' => 'View roles'],
['name' => 'management.roles.update', 'group' => 'Role Management', 'description' => 'Update role permissions'],
['name' => 'management.users.view', 'group' => 'User Management', 'description' => 'View users'],
['name' => 'management.users.create', 'group' => 'User Management', 'description' => 'Create users'],
['name' => 'management.users.update', 'group' => 'User Management', 'description' => 'Update users'],
];
foreach ($permissions as $permission) {
Permission::query()->updateOrCreate(
['name' => $permission['name'], 'guard_name' => 'web'],
[
'group' => $permission['group'],
'group_name' => $permission['group'],
'description' => $permission['description'],
],
);
}
$adminRole = Role::query()->firstOrCreate(['name' => 'Admin', 'guard_name' => 'web']);
Role::query()->firstOrCreate(['name' => 'Sales', 'guard_name' => 'web']);
Role::query()->firstOrCreate(['name' => 'Social Media Specialist', 'guard_name' => 'web']);
$adminRole->syncPermissions(Permission::query()->pluck('name')->all());
app(PermissionRegistrar::class)->forgetCachedPermissions();
}
}