-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRBAC
More file actions
38 lines (31 loc) · 1.28 KB
/
RBAC
File metadata and controls
38 lines (31 loc) · 1.28 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
//Control de Acceso Basado en Roles (RBAC)
public class RBACManager {
private static final Map> userRoles = new ConcurrentHashMap<>();
private static final Map> rolePermissions = new ConcurrentHashMap<>();
public static void addUserRole(String userId, String role) {
userRoles.computeIfAbsent(userId, k -> new HashSet<>()).add(role);
}
public static void addRolePermission(String role, String permission) {
rolePermissions.computeIfAbsent(role, k -> new HashSet<>()).add(permission);
}
public static boolean hasPermission(String userId, String permission) {
Set roles = userRoles.get(userId);
if (roles == null) return false;
return roles.stream()
.anyMatch(role -> {
Set permissions = rolePermissions.get(role);
return permissions != null && permissions.contains(permission);
});
}
@FunctionalInterface
public interface SecuredOperation {
void execute() throws SecurityException;
}
public static void requirePermission(String userId, String permission,
SecuredOperation operation) {
if (!hasPermission(userId, permission)) {
throw new SecurityException("Access denied");
}
operation.execute();
}
}