Files
usher-manage-stack/database/seeders/PaymentVerificationRolesSeeder.php
2025-11-20 23:21:05 +08:00

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");
}
}
}