示例#1
0
        public async Task CreateDiscussionAsync(Guid userId, string slug, Discussion discussion, CancellationToken cancellationToken)
        {
            if (Guid.Empty == userId)
            {
                throw new ArgumentOutOfRangeException(nameof(userId));
            }
            if (string.IsNullOrEmpty(slug))
            {
                throw new ArgumentOutOfRangeException(nameof(slug));
            }

            var now = _systemClock.UtcNow.UtcDateTime;

            var groupId = await _groupCommand.GetGroupIdForSlugAsync(slug, cancellationToken);

            if (!groupId.HasValue)
            {
                _logger.LogError($"Error: CreateDiscussionAsync - Group not found for slug:{0}", slug);
                throw new KeyNotFoundException("Error: Group not found for slug");
            }

            var userCanPerformAction = await _permissionsService.UserCanPerformActionAsync(userId, groupId.Value, AddDiscussionRole, cancellationToken);

            if (!userCanPerformAction)
            {
                _logger.LogError($"Error: CreateDiscussionAsync - User:{0} does not have access to group:{1}", userId, slug);
                throw new SecurityException($"Error: User does not have access");
            }

            var entityId = Guid.NewGuid();

            var discussionDto = new DiscussionDto
            {
                Id           = entityId,
                Title        = discussion.Title,
                Content      = discussion.Content,
                CreatedAtUTC = now,
                CreatedBy    = userId,
                IsSticky     = discussion.IsSticky,
                IsLocked     = false,
                GroupId      = groupId.Value
            };

            var validator        = new DiscussionValidator();
            var validationResult = await validator.ValidateAsync(discussionDto, cancellationToken);

            if (validationResult.Errors.Count > 0)
            {
                throw new ValidationException(validationResult);
            }

            await _discussionCommand.CreateDiscussionAsync(discussionDto, cancellationToken);
        }
示例#2
0
        public async Task <Folder> GetFolderAsync(Guid userId, string slug, Guid folderId, CancellationToken cancellationToken)
        {
            if (Guid.Empty == userId)
            {
                throw new ArgumentOutOfRangeException(nameof(userId));
            }
            if (Guid.Empty == folderId)
            {
                throw new ArgumentOutOfRangeException(nameof(userId));
            }
            if (string.IsNullOrEmpty(slug))
            {
                throw new ArgumentOutOfRangeException(nameof(slug));
            }

            var groupId = await _groupCommand.GetGroupIdForSlugAsync(slug, cancellationToken);

            if (!groupId.HasValue)
            {
                _logger.LogError($"Error: UpdateFolderAsync - Group not found for slug:{0}", slug);
                throw new KeyNotFoundException("Error: Group not found for slug");
            }

            var userCanViewFolder = await _permissionsService.UserCanPerformActionAsync(userId, slug, AddFolderRole, cancellationToken);

            if (!userCanViewFolder)
            {
                _logger.LogError($"Forbidden: GetFolderAsync - User:{0} does not have permission to view folder:{1}", userId, folderId);
                throw new ForbiddenException("Forbidden: User does not have permission to view this folder");
            }

            var folderDto = await _folderCommand.GetFolderAsync(folderId, cancellationToken);

            return(new Folder
            {
                Name = folderDto.Name,
                Description = folderDto.Description,
                RowVersion = folderDto.RowVersion
            });
        }
示例#3
0
        public async Task <GroupMemberDetails> GetGroupMembershipUserAsync(Guid userId, Guid targetUserId, string slug, CancellationToken cancellationToken)
        {
            if (Guid.Empty == userId)
            {
                throw new ArgumentOutOfRangeException(nameof(userId));
            }
            if (Guid.Empty == targetUserId)
            {
                throw new ArgumentOutOfRangeException(nameof(targetUserId));
            }
            if (string.IsNullOrEmpty(slug))
            {
                throw new ArgumentOutOfRangeException(nameof(slug));
            }

            var userCanPerformAction = await _permissionsService.UserCanPerformActionAsync(userId, slug, EditUserRole, cancellationToken);

            if (!userCanPerformAction)
            {
                _logger.LogError($"Error: GetGroupMembershipUserAsync - User:{0} does not have access to group:{1}", userId, slug);
                throw new ForbiddenException($"Error: User does not have access");
            }

            var groupId = await _groupCommand.GetGroupIdForSlugAsync(slug, cancellationToken);

            if (!groupId.HasValue)
            {
                _logger.LogError($"Error: GetGroupMembershipUserAsync - Group not found for slug:{0}", slug);
                throw new KeyNotFoundException("Error: Group not found for slug");
            }

            var groupUserResult = await _groupCommand.GetGroupUserAsync(targetUserId, groupId.Value, cancellationToken);

            if (groupUserResult is null)
            {
                _logger.LogError($"Error: GetGroupMembershipUserAsync - User:{0} not found in group:{1}", targetUserId, slug);
                throw new KeyNotFoundException("Error: User not found in group");
            }

            var userResult = await _userCommand.GetUserAsync(groupUserResult.MembershipUser, cancellationToken);

            if (userResult is null)
            {
                _logger.LogError($"Error: GetGroupMembershipUserAsync - User:{0} not found in group:{1}", groupUserResult.MembershipUser, slug);
                throw new KeyNotFoundException("Error: User not found in group");
            }

            var roleResult = await _rolesCommand.GetRoleAsync(groupUserResult.MembershipRole, cancellationToken);

            if (roleResult is null)
            {
                _logger.LogError($"Error: GetGroupMembershipUserAsync - Role:{0} not found in group:{1}", groupUserResult.MembershipRole, slug);
                throw new KeyNotFoundException("Error: User not found in group");
            }

            var membershipUser = new GroupMemberDetails
            {
                Id            = userResult.Id,
                UserName      = userResult.UserName,
                Slug          = userResult.Slug,
                FirstName     = userResult.FirstName,
                LastName      = userResult.LastName,
                Initials      = userResult.Initials,
                Email         = userResult.Email,
                DateJoinedUtc = groupUserResult.ApprovedDateUTCAsString,
                LastLoginUtc  = userResult.LastLoginDateUtc,
                RoleId        = roleResult.Id,
                Role          = roleResult.Name,
                RowVersion    = groupUserResult.RowVersion,
                Image         = userResult.Image
            };

            return(membershipUser);
        }