80 lines
3.0 KiB
PHP
80 lines
3.0 KiB
PHP
<?php
|
|
|
|
namespace Database\Seeders;
|
|
|
|
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
|
use Illuminate\Database\Seeder;
|
|
use Spatie\Permission\Models\Permission;
|
|
use Spatie\Permission\Models\Role;
|
|
|
|
class PaymentVerificationRolesSeeder extends Seeder
|
|
{
|
|
/**
|
|
* Run the database seeds.
|
|
*/
|
|
public function run(): void
|
|
{
|
|
// Create permissions for payment verification workflow
|
|
$permissions = [
|
|
'verify_payments_cashier' => 'Verify membership payments as cashier (Tier 1)',
|
|
'verify_payments_accountant' => 'Verify membership payments as accountant (Tier 2)',
|
|
'verify_payments_chair' => 'Verify membership payments as chair (Tier 3)',
|
|
'activate_memberships' => 'Activate member accounts after payment approval',
|
|
'view_payment_verifications' => 'View payment verification dashboard',
|
|
];
|
|
|
|
foreach ($permissions as $name => $description) {
|
|
Permission::firstOrCreate(
|
|
['name' => $name],
|
|
['guard_name' => 'web']
|
|
);
|
|
$this->command->info("Permission created: {$name}");
|
|
}
|
|
|
|
// Create roles for payment verification
|
|
$roles = [
|
|
'payment_cashier' => [
|
|
'permissions' => ['verify_payments_cashier', 'view_payment_verifications'],
|
|
'description' => 'Cashier - First tier payment verification',
|
|
],
|
|
'payment_accountant' => [
|
|
'permissions' => ['verify_payments_accountant', 'view_payment_verifications'],
|
|
'description' => 'Accountant - Second tier payment verification',
|
|
],
|
|
'payment_chair' => [
|
|
'permissions' => ['verify_payments_chair', 'view_payment_verifications'],
|
|
'description' => 'Chair - Final tier payment verification',
|
|
],
|
|
'membership_manager' => [
|
|
'permissions' => ['activate_memberships', 'view_payment_verifications'],
|
|
'description' => 'Membership Manager - Can activate memberships after approval',
|
|
],
|
|
];
|
|
|
|
foreach ($roles as $roleName => $roleData) {
|
|
$role = Role::firstOrCreate(
|
|
['name' => $roleName],
|
|
['guard_name' => 'web']
|
|
);
|
|
|
|
// Assign permissions to role
|
|
$role->syncPermissions($roleData['permissions']);
|
|
|
|
$this->command->info("Role created: {$roleName} with permissions: " . implode(', ', $roleData['permissions']));
|
|
}
|
|
|
|
// Assign all payment verification permissions to admin role (if exists)
|
|
$adminRole = Role::where('name', 'admin')->first();
|
|
if ($adminRole) {
|
|
$adminRole->givePermissionTo([
|
|
'verify_payments_cashier',
|
|
'verify_payments_accountant',
|
|
'verify_payments_chair',
|
|
'activate_memberships',
|
|
'view_payment_verifications',
|
|
]);
|
|
$this->command->info("Admin role updated with all payment verification permissions");
|
|
}
|
|
}
|
|
}
|