|
1 | 1 | 'use strict'; |
2 | 2 |
|
3 | | -const withContext = (context) => (accountId) => { |
4 | | - const { console, rbac, user } = context; |
5 | | - console.log(`User ${user.name} requesting balance for ${accountId}`); |
6 | | - if (!rbac.check(user.role, 'read:balance')) { |
7 | | - console.error('Access denied: insufficient permissions'); |
8 | | - return null; |
9 | | - } |
10 | | - const balance = 15420.5; |
11 | | - console.log('Access granted'); |
12 | | - return balance; |
| 3 | +const withContext = (context) => { |
| 4 | + const { console, accessPolicy, user } = context; |
| 5 | + const getBalance = (accountId) => { |
| 6 | + console.log(`User ${user.name} requesting balance for ${accountId}`); |
| 7 | + if (!accessPolicy.check(user.role, 'read:balance')) { |
| 8 | + console.error('Access denied: insufficient permissions'); |
| 9 | + return null; |
| 10 | + } |
| 11 | + const balance = 15420.5; |
| 12 | + console.log('Access granted'); |
| 13 | + return balance; |
| 14 | + }; |
| 15 | + return getBalance; |
13 | 16 | }; |
14 | 17 |
|
15 | 18 | // Usage |
16 | 19 |
|
17 | | -const rbac = { |
| 20 | +const accessPolicy = { |
18 | 21 | permissions: { |
19 | 22 | admin: ['read:balance', 'read:transactions', 'write:transactions'], |
20 | 23 | user: ['read:balance'], |
21 | 24 | guest: [], |
22 | 25 | }, |
23 | | - check: (role, permission) => rbac.permissions[role]?.includes(permission), |
| 26 | + check: (role, permission) => |
| 27 | + accessPolicy.permissions[role]?.includes(permission), |
24 | 28 | }; |
25 | 29 |
|
26 | | -const context = { console, rbac, user: { name: 'Marcus', role: 'admin' } }; |
| 30 | +const context = { |
| 31 | + console, |
| 32 | + accessPolicy, |
| 33 | + user: { name: 'Marcus', role: 'admin' }, |
| 34 | +}; |
27 | 35 | const getBalance = withContext(context); |
28 | 36 | const balance = getBalance('Account-123'); |
29 | | -console.log(`Access granted: balance = $${balance}`); |
| 37 | +console.log(`Balance = $${balance}`); |
0 commit comments