示例#1
0
        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));
        }
示例#2
0
        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);
        }
示例#3
0
 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));
 }
示例#4
0
 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);
         });
     }));
 }
示例#5
0
        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);
        }