whisper-money/app/Policies
Víctor Falcón fe5e22bcfe
refactor(policies): extract HandlesUserOwnership trait (#478)
## What

`CategoryPolicy`, `LabelPolicy`, `TransactionPolicy`,
`AutomationRulePolicy` were structurally identical: `update`/`delete`
check `$user->id === $model->user_id`, everything else returns `false`.
`AccountPolicy` same + ownership `view`.

New `app/Policies/Concerns/HandlesUserOwnership` trait; the 5 policies
now use it (Account keeps its `view` override).

`BudgetPolicy` and `RealEstateDetailPolicy` untouched — different
semantics (all-allowed / ownership via parent account).

## Stats

- **-252 / +112 lines**

## Checks

- `php artisan test
--filter="Categor|Label|Transaction|AutomationRule|Account|Polic"` — 607
passed (2887 assertions), 1 skipped
- `vendor/bin/pint --dirty` — pass

Part of duplication-removal series (#475, #476, #477).
2026-06-03 17:43:30 +02:00
..
Concerns refactor(policies): extract HandlesUserOwnership trait (#478) 2026-06-03 17:43:30 +02:00
AccountPolicy.php refactor(policies): extract HandlesUserOwnership trait (#478) 2026-06-03 17:43:30 +02:00
AutomationRulePolicy.php refactor(policies): extract HandlesUserOwnership trait (#478) 2026-06-03 17:43:30 +02:00
BudgetPolicy.php Add Budgeting Feature to Track and Manage Spending (#36) 2026-01-21 15:25:50 +01:00
CategoryPolicy.php refactor(policies): extract HandlesUserOwnership trait (#478) 2026-06-03 17:43:30 +02:00
LabelPolicy.php refactor(policies): extract HandlesUserOwnership trait (#478) 2026-06-03 17:43:30 +02:00
RealEstateDetailPolicy.php feat(accounts): add real estate asset tracking (#241) 2026-03-24 10:21:32 +00:00
TransactionPolicy.php refactor(policies): extract HandlesUserOwnership trait (#478) 2026-06-03 17:43:30 +02:00