Files
usher-manage-stack/app/Providers/AuthServiceProvider.php
gbanyan 42099759e8 Add phone login support and member import functionality
Features:
- Support login via phone number or email (LoginRequest)
- Add members:import-roster command for Excel roster import
- Merge survey emails with roster data

Code Quality (Phase 1-4):
- Add database locking for balance calculation
- Add self-approval checks for finance workflow
- Create service layer (FinanceDocumentApprovalService, PaymentVerificationService)
- Add HasAccountingEntries and HasApprovalWorkflow traits
- Create FormRequest classes for validation
- Add status-badge component
- Define authorization gates in AuthServiceProvider
- Add accounting config file

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 03:08:06 +08:00

79 lines
2.5 KiB
PHP

<?php
namespace App\Providers;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Gate;
class AuthServiceProvider extends ServiceProvider
{
/**
* The model to policy mappings for the application.
*
* @var array<class-string, class-string>
*/
protected $policies = [
//
];
/**
* Register any authentication / authorization services.
*/
public function boot(): void
{
// Define gates that map to Spatie permissions
// These gates are used in controllers with $this->authorize()
// Payment Order gates
Gate::define('create_payment_order', function ($user) {
return $user->can('create_payment_order');
});
Gate::define('verify_payment_order', function ($user) {
return $user->can('verify_payment_order');
});
Gate::define('execute_payment', function ($user) {
return $user->can('execute_payment');
});
// Finance document gates
Gate::define('approve_finance_secretary', function ($user) {
return $user->can('approve_finance_secretary') || $user->hasRole('secretary_general');
});
Gate::define('approve_finance_chair', function ($user) {
return $user->can('approve_finance_chair') || $user->hasRole('finance_chair');
});
Gate::define('approve_finance_board', function ($user) {
return $user->can('approve_finance_board') || $user->hasRole('finance_board_member');
});
// Member management gates
Gate::define('create_members', function ($user) {
return $user->can('create_members') || $user->hasRole(['admin', 'super_admin']);
});
Gate::define('edit_members', function ($user) {
return $user->can('edit_members') || $user->hasRole(['admin', 'super_admin']);
});
// Issue management gates
Gate::define('create_issues', function ($user) {
return $user->can('create_issues') || $user->hasRole(['admin', 'super_admin']);
});
Gate::define('edit_issues', function ($user) {
return $user->can('edit_issues') || $user->hasRole(['admin', 'super_admin']);
});
// Super admin bypass - can do anything
Gate::before(function ($user, $ability) {
if ($user->hasRole('super_admin')) {
return true;
}
});
}
}