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@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
rhq-commits@lists.fedorahosted.org