public OperationStatus UpdateUserRoles(PermissionItem permissionItem, long updatedById) { var operationStatus = new OperationStatus(); // Make sure input is not null this.CheckNotNull(() => new { permissionItem }); try { // Need to check the current user role before updating the request. var currentUserRole = _userRepository.GetUserRole(updatedById, permissionItem.CommunityID); // 1. Leave community should check for user role. // 2. User should be having moderator role or higher. // 3. If the permission being assigned in Owner, then only owners or site administrators can update the permission. if (permissionItem.Role != UserRole.None && ( currentUserRole < UserRole.Moderator || (permissionItem.Role == UserRole.Owner && currentUserRole != UserRole.Owner && currentUserRole != UserRole.SiteAdmin))) { operationStatus.Succeeded = false; operationStatus.CustomErrorMessage = true; operationStatus.ErrorMessage = Resources.NoPermissionsErrorMessage; } else { operationStatus = _userCommunitiesRepository.UpdateUserRoles(permissionItem); } } catch (Exception) { // TODO: Add exception handling logic here. operationStatus.Succeeded = false; operationStatus.CustomErrorMessage = true; operationStatus.ErrorMessage = Resources.UnknownErrorMessage; } return operationStatus; }
public OperationStatus JoinCommunity(PermissionItem permissionItem) { // Make sure input is not null this.CheckNotNull(() => new { permissionItem }); var operationStatus = new OperationStatus(); try { var permissionRequest = new PermissionRequest(); Mapper.Map(permissionItem, permissionRequest); permissionRequest.RequestedDate = DateTime.UtcNow; _permissionRequestRepository.Add(permissionRequest); _permissionRequestRepository.SaveChanges(); operationStatus.Succeeded = true; } catch (Exception) { // TODO: Add exception handling logic here. operationStatus.Succeeded = false; operationStatus.CustomErrorMessage = true; operationStatus.ErrorMessage = Resources.UnknownErrorMessage; } return operationStatus; }
/// <summary> /// Joins the current user to community for which the invite request token was generated. /// </summary> /// <param name="userId">User who is making the join request</param> /// <param name="inviteRequestToken">Token to be used for joining the community</param> /// <returns>Status of the operation. Success, if succeeded, failure message and exception details in case of exception.</returns> public async Task<OperationStatus> JoinCommunity(long userId, Guid inviteRequestToken) { var operationStatus = new OperationStatus(); try { // Find the invite request entity in database. var inviteRequest = _inviteRequestRepository.GetItem(invite => invite.InviteRequestToken == inviteRequestToken, "InviteRequestContent"); if (inviteRequest == null || inviteRequest.IsDeleted == true) { operationStatus = OperationStatus.CreateFailureStatus(Resources.InviteDeletedErrorMessage); } else if (inviteRequest.Used == true) { operationStatus = OperationStatus.CreateFailureStatus(Resources.InviteUsedErrorMessage); } else { var permissionItem = new PermissionItem { UserID = userId, CommunityID = inviteRequest.InviteRequestContent.CommunityID, Role = (UserRole) inviteRequest.InviteRequestContent.RoleID }; // Check if at all the user is already member of the same community. var existingRole = _userCommunitiesRepository.GetItem( userCommunity => userCommunity.UserID == userId && userCommunity.CommunityId == inviteRequest.InviteRequestContent.CommunityID); if (existingRole == null || inviteRequest.InviteRequestContent.RoleID > existingRole.RoleID) { operationStatus = _userCommunitiesRepository.UpdateUserRoles(permissionItem); } else { // Just mark OperationStatus as succeeded so that, the token will be marked as used. operationStatus.Succeeded = true; } if (operationStatus.Succeeded) { inviteRequest.Used = true; inviteRequest.UsedByID = userId; inviteRequest.UsedDate = DateTime.UtcNow; _inviteRequestRepository.Update(inviteRequest); _inviteRequestRepository.SaveChanges(); } } } catch (Exception) { // TODO: Add exception handling logic here. operationStatus.Succeeded = false; operationStatus.CustomErrorMessage = true; operationStatus.ErrorMessage = Resources.UnknownErrorMessage; } return operationStatus; }
/// <summary> /// Removes the specified invite request. /// </summary> /// <param name="userId">User who is removing the invite request</param> /// <param name="inviteRequestId">Invite request to be removed</param> /// <returns>True if the invite request is removed, false otherwise</returns> public async Task<OperationStatus> RemoveInviteRequest(long userId, int inviteRequestId) { var operationStatus = new OperationStatus(); try { // Find the invite request entity in database. InviteRequest inviteRequest = _inviteRequestRepository.GetItem(ir => ir.InviteRequestID == inviteRequestId, "InviteRequestContent"); // Check invite request is not null this.CheckNotNull(() => new { inviteRequest }); var userRole = _userRepository.GetUserRole(userId, inviteRequest.InviteRequestContent.CommunityID); if (userRole >= UserRole.Moderator) { inviteRequest.IsDeleted = true; inviteRequest.DeletedByID = userId; inviteRequest.DeletedDate = DateTime.UtcNow; _inviteRequestRepository.Update(inviteRequest); _inviteRequestRepository.SaveChanges(); operationStatus.Succeeded = true; } else { operationStatus = OperationStatus.CreateFailureStatus(Resources.NoPermissionInviteRequestMessage); } } catch (Exception) { // TODO: Add exception handling logic here. operationStatus.Succeeded = false; operationStatus.CustomErrorMessage = true; operationStatus.ErrorMessage = Resources.UnknownErrorMessage; } return operationStatus; }