forked from AetherEdu/AetherMint
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrbacController.js
More file actions
101 lines (94 loc) · 2.78 KB
/
Copy pathrbacController.js
File metadata and controls
101 lines (94 loc) · 2.78 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
97
98
99
100
101
const rbacService = require('../services/rbacService');
const logger = require('../utils/logger');
/**
* RBAC Controller functions
*/
const rbacController = {
/**
* Update a user's role
* POST /api/rbac/assign-role
*/
listRoles: async (req, res) => {
res.status(200).json({ success: true, data: [] });
},
createRole: async (req, res) => {
res.status(201).json({ success: true, data: { id: 'stub' } });
},
getRole: async (req, res) => {
res.status(200).json({ success: true, data: {} });
},
updateRole: async (req, res) => {
res.status(200).json({ success: true, data: {} });
},
deleteRole: async (req, res) => {
res.status(200).json({ success: true });
},
getUserRoles: async (req, res) => {
res.status(200).json({ success: true, data: [] });
},
removeRole: async (req, res) => {
res.status(200).json({ success: true });
},
listPermissions: async (req, res) => {
res.status(200).json({ success: true, data: [] });
},
updateRolePermissions: async (req, res) => {
res.status(200).json({ success: true, data: {} });
},
assignRole: async (req, res) => {
try {
const { userId, role } = req.body;
const admin = req.user;
if (!userId || !role) {
return res.status(400).json({
success: false,
message: 'User ID and Role are required'
});
}
// 1. Check if the performer is authorized (Admin level or hierarchy)
if (!rbacService.canAssignRole(admin.role, role)) {
return res.status(403).json({
success: false,
message: 'Forbidden: You do not have permission to assign this role',
code: 'PRIVILEGE_ESCALATION_DENIED'
});
}
// 2. Perform role assignment via service
const result = await rbacService.assignRole(admin.id, userId, role);
res.status(200).json({
success: true,
message: 'Role assigned successfully',
data: result
});
} catch (err) {
logger.error('RBAC Assignment Error:', err);
res.status(500).json({
success: false,
message: err.message || 'Error occurred during role assignment'
});
}
},
/**
* Get all user and role permissions for auditing
* GET /api/rbac/permissions
*/
getAvailablePermissions: async (req, res) => {
try {
const { ROLE_PERMISSIONS } = require('../utils/roles');
res.status(200).json({
success: true,
data: {
roles: Object.keys(ROLE_PERMISSIONS),
permissions: ROLE_PERMISSIONS
}
});
} catch (err) {
logger.error('RBAC Permissions Error:', err);
res.status(500).json({
success: false,
message: 'Internal server error while retrieving permission list'
});
}
}
};
module.exports = rbacController;