RBAC » History » Version 6
karnake ruengchaicharnkij, 04/19/2026 08:57 AM
| 1 | 1 | karnake ruengchaicharnkij | # RBAC |
|---|---|---|---|
| 2 | 4 | karnake ruengchaicharnkij | [Page ID](PageId) |
| 3 | 5 | karnake ruengchaicharnkij | ## Example |
| 4 | {{collapse(JSON...) |
||
| 5 | ```json |
||
| 6 | 1 | karnake ruengchaicharnkij | { |
| 7 | 5 | karnake ruengchaicharnkij | "version": "1.0", |
| 8 | "roles": [ |
||
| 9 | { |
||
| 10 | "id": "admin", |
||
| 11 | "name": "Admin", |
||
| 12 | "rules": [ |
||
| 13 | { |
||
| 14 | "page": { |
||
| 15 | "id": "admin_onboarding", |
||
| 16 | "name": "Admin Onboarding", |
||
| 17 | "sections": [ |
||
| 18 | { |
||
| 19 | "id": "admin_onboarding_data", |
||
| 20 | "name": "Onboarding Data", |
||
| 21 | "permissions": ["checker", "maker", "approver"] |
||
| 22 | }, |
||
| 23 | { |
||
| 24 | "id": "admin_onboarding_documents", |
||
| 25 | "name": "Documents", |
||
| 26 | "permissions": ["checker"] |
||
| 27 | } |
||
| 28 | ] |
||
| 29 | } |
||
| 30 | }, |
||
| 31 | { |
||
| 32 | "page": { |
||
| 33 | "id": "user_management", |
||
| 34 | "name": "User Management", |
||
| 35 | "sections": [ |
||
| 36 | { |
||
| 37 | "id": "user_list", |
||
| 38 | "name": "User List", |
||
| 39 | "permissions": ["maker", "approver"] |
||
| 40 | } |
||
| 41 | ] |
||
| 42 | } |
||
| 43 | } |
||
| 44 | ] |
||
| 45 | }, |
||
| 46 | { |
||
| 47 | "id": "supervisor", |
||
| 48 | "name": "Supervisor", |
||
| 49 | "rules": [ |
||
| 50 | { |
||
| 51 | "page": { |
||
| 52 | "id": "admin_onboarding", |
||
| 53 | "name": "Admin Onboarding", |
||
| 54 | "sections": [ |
||
| 55 | { |
||
| 56 | "id": "admin_onboarding_data", |
||
| 57 | "name": "Onboarding Data", |
||
| 58 | "permissions": ["checker", "approver"] |
||
| 59 | } |
||
| 60 | ] |
||
| 61 | } |
||
| 62 | } |
||
| 63 | ] |
||
| 64 | } |
||
| 65 | ], |
||
| 66 | "permission_definitions": { |
||
| 67 | "checker": "Can view and verify data", |
||
| 68 | "maker": "Can create and edit data", |
||
| 69 | "approver": "Can approve or reject data" |
||
| 70 | } |
||
| 71 | 1 | karnake ruengchaicharnkij | } |
| 72 | ``` |
||
| 73 | 5 | karnake ruengchaicharnkij | }} |
| 74 | |||
| 75 | {{collapse(React Hook...) |
||
| 76 | ``` javascript |
||
| 77 | function usePagePermission(pageId: string, sectionId: string) { |
||
| 78 | const { userRole, config } = useAuth() |
||
| 79 | |||
| 80 | return { |
||
| 81 | canCheck: hasPermission(config, userRole, pageId, sectionId, 'checker'), |
||
| 82 | canMake: hasPermission(config, userRole, pageId, sectionId, 'maker'), |
||
| 83 | canApprove: hasPermission(config, userRole, pageId, sectionId, 'approver'), |
||
| 84 | } |
||
| 85 | } |
||
| 86 | |||
| 87 | // ใน component |
||
| 88 | function OnboardingPage() { |
||
| 89 | const { canMake, canApprove } = usePagePermission('admin_onboarding', 'admin_onboarding_data') |
||
| 90 | |||
| 91 | return ( |
||
| 92 | <div> |
||
| 93 | {canMake && <button>Edit</button>} |
||
| 94 | {canApprove && <button>Approve</button>} |
||
| 95 | </div> |
||
| 96 | ) |
||
| 97 | } |
||
| 98 | ``` |
||
| 99 | }} |
||
| 100 | 6 | karnake ruengchaicharnkij | {{collapse(Approval DB schemas...) |
| 101 | ```sql |
||
| 102 | |||
| 103 | ``` |
||
| 104 | }} |
||
| 105 | 1 | karnake ruengchaicharnkij | **Enumbulator** |
| 106 | |||
| 107 | |Permission_name |Permission_id | |
||
| 108 | |--|--| |
||
| 109 | |maker |11 | |
||
| 110 | |checker |12 | |
||
| 111 | |approver |13 | |