public async Task <IActionResult> GetResourcesforUser(string userId) { List <ScampResourceSummary> resourceList = new List <ScampResourceSummary>(); ScampUser currentUser = await _securityHelper.GetOrCreateCurrentUser(); // request must be systemAdmin, or the requesting user if (!currentUser.IsSystemAdmin && currentUser.Id != userId) { return new ObjectResult("User is not authorized to perform this action against specific resource(s)") { StatusCode = 401 } } ; // execute query ScampUser user = await _userRepository.GetUserById(userId); if (user == null) { return new ObjectResult("requested resource not available") { StatusCode = 204 } } ; foreach (ScampUserGroupMbrship groupMbrship in user.GroupMembership) { foreach (ScampUserGroupResources resource in groupMbrship.Resources) { // get resource state from volatile store CurrentResourceState currentState = await _volatileStorageController.GetResourceState(resource.Id); ScampResourceSummary tmpSummary = new ScampResourceSummary() { Id = resource.Id, Name = resource.Name, Type = resource.type, State = currentState.State, totUnitsUsed = currentState.UnitsUsed }; resourceList.Add(tmpSummary); } } return(new ObjectResult(resourceList) { StatusCode = 200 }); }
public async Task <IActionResult> Get(string groupId, string userId) { //TODO: add in group admin/manager authorization check //if (!await CurrentUserCanViewGroup(group)) // return new HttpStatusCodeResult(403); // Forbidden //} // get group details var tmpUser = await _userRepository.GetUserById(userId); if (tmpUser == null) // group not found, return appropriately { return(HttpNotFound()); } ScampUserGroupMbrship tmpGroup = tmpUser.GroupMembership.FirstOrDefault(g => g.Id == groupId); if (tmpGroup == null) // user not found in group, return appropriately { return(new HttpStatusCodeResult(204)); // nothing found } // build return view List <ScampResourceSummary> rtnView = new List <ScampResourceSummary>(); foreach (ScampUserGroupResources resourceRef in tmpGroup.Resources) { // get resource usage var rscState = await _volatileStorageController.GetResourceState(resourceRef.Id); ScampResourceSummary tmpSummary = new ScampResourceSummary() { Id = resourceRef.Id, Name = resourceRef.Name, State = rscState.State, totUnitsUsed = rscState.UnitsUsed }; rtnView.Add(tmpSummary); } return(new ObjectResult(rtnView) { StatusCode = 200 }); }