public Either <ActionResult, Unit> SendPublicationRoleEmail( string email, Publication publication, PublicationRole role) { var uri = _configuration.GetValue <string>("AdminUri"); var template = _configuration.GetValue <string>("NotifyPublicationRoleTemplateId"); var emailValues = new Dictionary <string, dynamic> { { "url", $"https://{uri}" }, { "role", role.ToString() }, { "publication", publication.Title } }; return(_emailService.SendEmail(email, template, emailValues)); }
public async Task <UserPublicationRole> Create(Guid userId, Guid publicationId, PublicationRole role, Guid createdById) { var userPublicationRole = new UserPublicationRole { UserId = userId, PublicationId = publicationId, Role = role, Created = DateTime.UtcNow, CreatedById = createdById }; var created = (await _contentDbContext.UserPublicationRoles.AddAsync(userPublicationRole)).Entity; await _contentDbContext.SaveChangesAsync(); return(created); }
public async Task <bool> UserHasRoleOnPublication(Guid userId, Guid publicationId, PublicationRole role) { return(await _contentDbContext.UserPublicationRoles .AsQueryable() .AnyAsync(r => r.UserId == userId && r.PublicationId == publicationId && r.Role == role)); }
public async Task <Either <ActionResult, Unit> > AddPublicationRole(Guid userId, Guid publicationId, PublicationRole role) { return(await _userService .CheckCanManageAllUsers() .OnSuccess(async() => { return await _usersAndRolesPersistenceHelper .CheckEntityExists <ApplicationUser, string>(userId.ToString()) .OnSuccessCombineWith(user => _contentPersistenceHelper.CheckEntityExists <Publication>(publicationId)) .OnSuccessDo(release => ValidatePublicationRoleCanBeAdded(userId, publicationId, role)) .OnSuccess(async tuple => { var(user, publication) = tuple; await _userPublicationRoleRepository.Create( userId: userId, publicationId: publication.Id, role: role, createdById: _userService.GetUserId()); return _emailTemplateService.SendPublicationRoleEmail(user.Email, publication, role); }); })); }
private async Task <Either <ActionResult, Unit> > ValidatePublicationRoleCanBeAdded(Guid userId, Guid publicationId, PublicationRole role) { if (await _userPublicationRoleRepository.UserHasRoleOnPublication(userId, publicationId, role)) { return(ValidationActionResult(UserAlreadyHasResourceRole)); } return(Unit.Instance); }