Example #1
0
        private async Task <Collection> GetCollectionAsync(
            int collectionId, int userId, IDbTransaction transaction = null)
        {
            var basicDetails = await _artifactRepository.GetArtifactBasicDetails(collectionId, userId, transaction);

            if (basicDetails == null || basicDetails.DraftDeleted || basicDetails.LatestDeleted)
            {
                throw CollectionsExceptionHelper.NotFoundException(collectionId);
            }

            if (basicDetails.PrimitiveItemTypePredefined != (int)ItemTypePredefined.ArtifactCollection)
            {
                throw CollectionsExceptionHelper.InvalidTypeException(collectionId);
            }

            var permissions = await _artifactPermissionsRepository.GetArtifactPermissions(
                collectionId, userId, transaction : transaction);

            RolePermissions collectionPermissions;

            if (!permissions.TryGetValue(collectionId, out collectionPermissions) ||
                !collectionPermissions.HasFlag(RolePermissions.Read))
            {
                throw CollectionsExceptionHelper.NoAccessException(collectionId);
            }

            return(new Collection(
                       basicDetails.ArtifactId,
                       basicDetails.ProjectId,
                       basicDetails.LockedByUserId,
                       collectionPermissions));
        }
Example #2
0
 private async Task LockAsync(Collection collection, int userId, IDbTransaction transaction = null)
 {
     if (collection.LockedByUserId == null)
     {
         if (!await _lockArtifactsRepository.LockArtifactAsync(collection.Id, userId, transaction))
         {
             throw ExceptionHelper.ArtifactNotLockedException(collection.Id, userId);
         }
     }
     else if (collection.LockedByUserId != userId)
     {
         throw CollectionsExceptionHelper.LockedByAnotherUserException(collection.Id, userId);
     }
 }
Example #3
0
        private async Task <Collection> ValidateCollectionAsync(int collectionId, int userId, IDbTransaction transaction)
        {
            var collection = await GetCollectionAsync(collectionId, userId, transaction);

            if (!collection.Permissions.HasFlag(RolePermissions.Edit))
            {
                throw CollectionsExceptionHelper.NoEditPermissionException(collectionId);
            }

            await LockAsync(collection, userId, transaction);

            await _collectionsRepository.RemoveDeletedArtifactsFromCollectionAsync(collection.Id, userId, transaction);

            return(collection);
        }