public async Task <IViewComponentResult> InvokeAsync(int targetUserId, int groupId, int credentialId, CancellationToken cancellationToken) { var user = await _authService.GetCurrentUser(HttpContext, cancellationToken); if (user == null) { throw new UnauthorizedAccessException("No user in session"); } if (!await _groupMemberService.GetUserHasRole(user.ID, groupId, GroupRoles.UserAdmin, true, cancellationToken)) { throw new UnauthorizedAccessException("User does not have required role."); } if (!await _groupMemberService.GetUserHasRole(targetUserId, groupId, GroupRoles.Member, false, cancellationToken)) { throw new UnauthorizedAccessException("Target user is not member of group."); } var viewModel = new AssignCredentialsViewModel() { TargetUser = await _userService.GetUserAsync(targetUserId, cancellationToken), Credential = await _groupService.GetGroupCredential(groupId, credentialId), ValidUntilOptions = GetValidUntilOptions(), }; return(View("AssignCredentialsPopup", viewModel)); }
public async Task <bool> PutVolunteerCredential(string u, string g, string c, [FromBody] AssignCredentialsViewModel assignCredentialsViewModel, CancellationToken cancellationToken) { int targetUserId = Base64Utils.Base64DecodeToInt(u); int groupId = Base64Utils.Base64DecodeToInt(g); int credentialId = Base64Utils.Base64DecodeToInt(c); var user = await _authService.GetCurrentUser(HttpContext, cancellationToken); DateTime?validUntil = assignCredentialsViewModel.ValidUntil == "Null" ? (DateTime?)null : DateTime.ParseExact(assignCredentialsViewModel.ValidUntil, DatePickerHelpers.DATE_PICKER_DATE_FORMAT, new CultureInfo("en-GB")); PutGroupMemberCredentialsRequest putGroupMemberCredentialsRequest = new PutGroupMemberCredentialsRequest() { AuthorisedByUserID = user.ID, UserId = targetUserId, GroupId = groupId, CredentialId = credentialId, Reference = assignCredentialsViewModel.Reference, Notes = assignCredentialsViewModel.Notes, ValidUntil = validUntil, }; return(await _groupMemberService.PutGroupMemberCredentials(putGroupMemberCredentialsRequest)); }