From 5d9088d222762f3a44f5fd4b3236be56dc6ddc5b Mon Sep 17 00:00:00 2001 From: phuongtc Date: Wed, 29 Apr 2026 09:39:03 +0000 Subject: [PATCH] docs: NEXT_SESSION.md - Permission System todo for next session --- NEXT_SESSION.md | 55 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/NEXT_SESSION.md b/NEXT_SESSION.md index b89aabc..ee411b3 100644 --- a/NEXT_SESSION.md +++ b/NEXT_SESSION.md @@ -55,3 +55,58 @@ DB_HOST=127.0.0.1 ./vendor/bin/pest --- *Commit ngay lập tức trước khi tắt máy!* + +--- + +## PHIÊN TIẾP THEO - PHÂN QUYỀN (CÒN DỞ) + +### Đã có: +- [x] Migration: permission_modules, role_templates, users columns +- [x] Models: PermissionModule, RoleTemplate +- [x] Command: `php artisan permissions:sync` +- [x] User Model: getEffectivePermissions(), hasEffectivePermission(), can() override +- [x] RoleTemplateResource: Form + Table + Pages (UI tạo mẫu nhóm) +- [x] UserResource: Form + Table + Pages (UI gán quyền user) +- [x] permissionActions trong 10 Resource + +### CHƯA CÓ (Ưu tiên): +1. [ ] Áp dụng can() checks vào TẤT CẢ Resource + - Chưa có canViewAny(), canCreate(), canEdit(), canDelete()... trong Resource + - Cần thêm vào hoặc tạo base trait để auto check + - Hiện tại tất cả user vẫn full quyền! + +2. [ ] Tạo seeder/sample data cho role_templates + - Admin: full quyền + - Sales: contracts CRUD, customers CRUD, products view + - Kế toán: payments CRUD, contracts view, reports view + +3. [ ] Test User::can() override hoạt động đúng + - Login → tính effective permissions → lưu session + - Logout → xóa session + - can('contracts.create') → true/false đúng + +### Cách áp dụng can() vào Resource (gợi ý): +```php +// Trong mỗi Resource class +public static function canViewAny(): bool +{ + return auth()->user()?->can('contracts.view') ?? false; +} +public static function canCreate(): bool +{ + return auth()->user()?->can('contracts.create') ?? false; +} +public static function canEdit($record): bool +{ + return auth()->user()?->can('contracts.update') ?? false; +} +public static function canDelete($record): bool +{ + return auth()->user()?->can('contracts.delete') ?? false; +} +``` + +### Lưu ý: +- Không chạy `php artisan permissions:sync` tự động (chạy tay khi thêm module) +- Action mới mặc định TẮT +- Layout RoleTemplateForm đã fix full width