getAuthMiddleware function
Handler Function(Handler innerHandler)
getAuthMiddleware(
- Permission requiredPermission
)
Implementation
Handler Function(Handler innerHandler) getAuthMiddleware(
Permission requiredPermission) {
final service = tokenService;
return (Handler innerHandler) {
return (Request request) {
if (service == null) {
return innerHandler(request);
}
final authHeader = request.headers['Authorization'];
if (authHeader == null || !authHeader.startsWith('Bearer ')) {
return Response.unauthorized('Missing or invalid Authorization header',
headers: {
'WWW-Authenticate': 'Bearer',
});
}
final token = authHeader.substring(7);
final result = service.validateToken(token);
if (result.isError) {
print("⚠️ Invalid token: ${result.asError!.error}");
return Response.forbidden('Invalid token: ${result.asError!.error}');
}
final principal = result.asValue!.value;
final permissions = principal.permissions;
if (!permissions.contains(requiredPermission)) {
print("⚠️ Insufficient permissions for '${principal.issuedFor}': "
"have ${permissions.join(", ")}. Need $requiredPermission");
return Response.forbidden(
'Insufficient permissions. Required: $requiredPermission');
}
final issuedFor = principal.issuedFor;
print("✅ Valid token for '$issuedFor'");
final updatedRequest = request.change(
context: {
...request.context,
'authorName': issuedFor,
},
);
return innerHandler(updatedRequest);
};
};
}