diff --git a/src/main/java/com/klaroworks/runtime/role/RoleContext.java b/src/main/java/com/klaroworks/runtime/role/RoleContext.java new file mode 100644 index 0000000..a831717 --- /dev/null +++ b/src/main/java/com/klaroworks/runtime/role/RoleContext.java @@ -0,0 +1,80 @@ +package com.klaroworks.runtime.role; + +import java.util.Map; +import java.util.HashMap; +import java.util.Collections; + +/** + * Role context interface for role-based access control. + * Used by RoleMatrixRuntimeTest for context management testing. + */ +public interface RoleContext { + + /** + * Get the current user ID. + * @return user identifier + */ + String getUserId(); + + /** + * Get the current role. + * @return role name + */ + String getRole(); + + /** + * Get permissions associated with this context. + * @return immutable map of permissions + */ + Map getPermissions(); + + /** + * Check if a specific permission is granted. + * @param permission permission key + * @return true if granted + */ + boolean hasPermission(String permission); + + /** + * Simple implementation of RoleContext. + */ + class SimpleRoleContext implements RoleContext { + private final String userId; + private final String role; + private final Map permissions; + + public SimpleRoleContext(String userId, String role, Map permissions) { + this.userId = userId; + this.role = role; + this.permissions = permissions != null ? Collections.unmodifiableMap(new HashMap<>(permissions)) : Collections.emptyMap(); + } + + @Override + public String getUserId() { + return userId; + } + + @Override + public String getRole() { + return role; + } + + @Override + public Map getPermissions() { + return permissions; + } + + @Override + public boolean hasPermission(String permission) { + return permissions.getOrDefault(permission, false); + } + + public static SimpleRoleContext of(String userId, String role) { + return new SimpleRoleContext(userId, role, Map.of( + "read", true, + "write", role.equals("ADMIN") || role.equals("MANAGER"), + "delete", role.equals("ADMIN") + )); + } + } +}