modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementChartsManagerBean.java
| 13 ++++++--
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementScheduleManagerBean.java
| 16 ++++++----
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementScheduleManagerLocal.java
| 10 ++++++
3 files changed, 31 insertions(+), 8 deletions(-)
New commits:
commit acda1f052f9e0d711213ded8b0164a72940e814f
Author: John Sanda <jsanda(a)redhat.com>
Date: Mon Mar 29 16:48:31 2010 -0400
[BZ 573982] Moving the authorization check into MeasurementChartsManagerBean
Previously, a call to getMetricDisplaySummariesForCompatibleGroup
resulted in NxM calls to AuthorizationManagerLocal.canViewResources
where N = number of measurement defs and M = number of resources. Those
NxM calls have been reduced to a single call to the new
canViewResources method in AuhtorizationManagerLocal.
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementChartsManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementChartsManagerBean.java
index 5ecc627..b3c240f 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementChartsManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementChartsManagerBean.java
@@ -52,6 +52,8 @@ import org.rhq.core.domain.util.PageList;
import org.rhq.core.util.collection.ArrayUtils;
import org.rhq.enterprise.server.RHQConstants;
import org.rhq.enterprise.server.alert.AlertManagerLocal;
+import org.rhq.enterprise.server.authz.AuthorizationManagerLocal;
+import org.rhq.enterprise.server.authz.PermissionException;
import org.rhq.enterprise.server.common.EntityContext;
import org.rhq.enterprise.server.common.PerformanceMonitorInterceptor;
import
org.rhq.enterprise.server.measurement.MeasurementPreferences.MetricRangePreferences;
@@ -95,6 +97,8 @@ public class MeasurementChartsManagerBean implements
MeasurementChartsManagerLoc
private ResourceGroupManagerLocal resourceGroupManager;
@EJB
private MeasurementViewManagerLocal viewManager;
+ @EJB
+ private AuthorizationManagerLocal authorizationManager;
public List<MetricDisplaySummary> getMetricDisplaySummariesForAutoGroup(Subject
subject,
int autoGroupParentResourceId, int autoGroupChildResourceTypeId, int[]
measurementDefinitionIds, long begin,
@@ -449,15 +453,18 @@ public class MeasurementChartsManagerBean implements
MeasurementChartsManagerLoc
return data;
}
- // TODO if cannot view resources throw permission exception
+ if (!authorizationManager.canViewResources(subject,
ArrayUtils.wrapInList(resourceIds))) {
+ throw new PermissionException("User[" + subject.getName() + "]
does not have permission to view metric " +
+ "schedules for resource ids, " +
ArrayUtils.wrapInList(resourceIds));
+ }
MeasurementDataManagerUtility dataUtil =
MeasurementDataManagerUtility.getInstance(rhqDs);
// Loop over the definitions, find matching schedules and create a
MetricDisplaySummary for each definition
for (int definitionId : measurementDefinitionIds) {
int collecting = 0;
- List<MeasurementSchedule> schedules =
scheduleManager.findSchedulesByResourceIdsAndDefinitionId(subject,
- resourceIds, definitionId);
+ List<MeasurementSchedule> schedules =
scheduleManager.findSchedulesByResourceIdsAndDefinitionIds(resourceIds,
+ new int[] {definitionId});
int[] scheduleIds = new int[schedules.size()];
for (int i = 0; i < schedules.size(); i++) {
MeasurementSchedule schedule = schedules.get(i);
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementScheduleManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementScheduleManagerBean.java
index 4a95ac1..3d5401c 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementScheduleManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementScheduleManagerBean.java
@@ -256,6 +256,15 @@ public class MeasurementScheduleManagerBean implements
MeasurementScheduleManage
return findSchedulesByResourcesAndDefinitions(subject, resourceIds, new int[] {
definitionId });
}
+ public List<MeasurementSchedule>
findSchedulesByResourceIdsAndDefinitionIds(int[] resourceIds,
+ int[] definitionIds) {
+ Query query =
entityManager.createNamedQuery(MeasurementSchedule.FIND_BY_RESOURCE_IDS_AND_DEFINITION_IDS);
+ query.setParameter("definitionIds",
ArrayUtils.wrapInList(definitionIds));
+ query.setParameter("resourceIds", ArrayUtils.wrapInList(resourceIds));
+ List<MeasurementSchedule> results = query.getResultList();
+ return results;
+ }
+
@SuppressWarnings("unchecked")
private List<MeasurementSchedule>
findSchedulesByResourcesAndDefinitions(Subject subject, int[] resourceIds,
int[] definitionIds) {
@@ -266,13 +275,10 @@ public class MeasurementScheduleManagerBean implements
MeasurementScheduleManage
}
}
- Query query =
entityManager.createNamedQuery(MeasurementSchedule.FIND_BY_RESOURCE_IDS_AND_DEFINITION_IDS);
- query.setParameter("definitionIds",
ArrayUtils.wrapInList(definitionIds));
- query.setParameter("resourceIds", ArrayUtils.wrapInList(resourceIds));
- List<MeasurementSchedule> results = query.getResultList();
- return results;
+ return findSchedulesByResourceIdsAndDefinitionIds(resourceIds, definitionIds);
}
+
/**
* Find MeasurementSchedules that are attached to a certain definition and a
resource
*
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementScheduleManagerLocal.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementScheduleManagerLocal.java
index 4436294..5403878 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementScheduleManagerLocal.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementScheduleManagerLocal.java
@@ -261,6 +261,16 @@ public interface MeasurementScheduleManagerLocal {
int definitionId);
/**
+ * Return a list of MeasurementSchedules for the given definition ids and resource
ids. Note that this method does
+ * not take a Subject argument. Security checks are the responsibility of the
caller.
+ *
+ * @param resourceIds The ids of the resource for which schedules are being fetched
+ * @param definitionIds The ids of the the measurement definitions
+ * @return A list of MeasurementSchedules
+ */
+ List<MeasurementSchedule> findSchedulesByResourceIdsAndDefinitionIds(int[]
resourceIds, int[] definitionIds);
+
+ /**
* Get the MeasurementSchedule composites for an autogroup
*
* @param subject
Show replies by date