-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpermissions.ts
More file actions
96 lines (82 loc) · 2.58 KB
/
permissions.ts
File metadata and controls
96 lines (82 loc) · 2.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/**
* Example demonstrating the permission system
*/
import { PermissionManager, PermissionType } from '../src/index.js';
async function main() {
const manager = new PermissionManager();
// Track permission events
manager.on('granted', (data) => {
console.log(`✓ Granted: ${data.type} for ${data.resource}`);
});
manager.on('denied', (data) => {
console.log(`✗ Denied: ${data.type} for ${data.resource}`);
});
manager.on('revoked', (data) => {
console.log(`⚠ Revoked: ${data.type} for ${data.resource}`);
});
// Set auto-approve for safe operations
console.log('Configuring auto-approval...');
manager.setAutoApprove([
PermissionType.FILESYSTEM_READ,
]);
// Test auto-approved permission
console.log('\n1. Testing auto-approved permission...');
const canRead = await manager.request(
PermissionType.FILESYSTEM_READ,
'package.json',
'Read package.json to check dependencies'
);
console.log(`Result: ${canRead ? 'Approved' : 'Denied'}`);
// Test manual permission (simulated)
console.log('\n2. Testing manual permission...');
manager.on('approval-required', (data) => {
console.log(`\n🔐 Approval Required:`);
console.log(` Type: ${data.type}`);
console.log(` Resource: ${data.resource}`);
console.log(` Details: ${data.details}`);
console.log(' User decision: Approved');
data.approve();
});
const canWrite = await manager.request(
PermissionType.FILESYSTEM_WRITE,
'output.txt',
'Write results to output.txt'
);
console.log(`Result: ${canWrite ? 'Approved' : 'Denied'}`);
// Check permission status
console.log('\n3. Checking permission status...');
console.log(
`Can read package.json: ${manager.check(
PermissionType.FILESYSTEM_READ,
'package.json'
)}`
);
console.log(
`Can write output.txt: ${manager.check(
PermissionType.FILESYSTEM_WRITE,
'output.txt'
)}`
);
// Revoke a permission
console.log('\n4. Revoking permission...');
manager.revoke(PermissionType.FILESYSTEM_WRITE, 'output.txt');
console.log(
`Can write output.txt: ${manager.check(
PermissionType.FILESYSTEM_WRITE,
'output.txt'
)}`
);
// Get all permissions
console.log('\n5. All active permissions:');
const all = manager.getAll();
all.forEach((p) => {
console.log(
` - ${p.type}: ${p.resource} (${p.permanent ? 'permanent' : 'temporary'})`
);
});
// Clear all permissions
console.log('\n6. Clearing all permissions...');
manager.clear();
console.log(`Active permissions: ${manager.getAll().length}`);
}
main();