コード例 #1
0
        public async Task <IActionResult> PostCategory([FromBody] Category category)
        {
            var currentUser = await GetCurrentUser();

            if (!(await _accessService.CanAdd(category, currentUser)))
            {
                return(Forbid());
            }

            if (category.Contest && category.ParentId != null)
            {
                return(BadRequest(nameof(category.Contest)));
            }

            var publicCheckResult = await CheckIfCategoryCanBePublic(category);

            if (publicCheckResult != null)
            {
                return(publicCheckResult);
            }

            _context.Categories.Add(category);
            category.Users = new List <CategoryUser>();
            var categoryUser = new CategoryUser {
                UserId = currentUser.Id, CategoryId = category.Id
            };

            categoryUser.SetFullRights();
            category.Users.Add(categoryUser);
            await _context.SaveChangesAsync();

            return(CreatedAtAction("GetCategory", new { id = category.Id }, category));
        }
コード例 #2
0
        private static async Task AddUserToCategoryAsync(ApplicationUser user, string categoryName, ICategoriesService categoriesService, IRepository <CategoryUser> categoryUsersRepository)
        {
            var categoryId = categoriesService.GetCategoryIdByName(categoryName);

            var categoryUser = new CategoryUser
            {
                User       = user,
                CategoryId = categoryId,
            };

            await categoryUsersRepository.AddAsync(categoryUser);

            user.UserCategories.Add(categoryUser);
        }
コード例 #3
0
        private static async Task AddUserToCategoriesAsync(int[] categoriesId, string userId, ApplicationDbContext dbContext)
        {
            foreach (var categoryId in categoriesId)
            {
                var categoryUser = new CategoryUser
                {
                    UserId     = userId,
                    CategoryId = categoryId,
                };

                dbContext.CategoriesUsers.Add(categoryUser);
                await dbContext.SaveChangesAsync();
            }
        }
コード例 #4
0
        public async Task CreateAsync(string userId, ICollection <int> categoriesId)
        {
            foreach (var categoryId in categoriesId)
            {
                var categoryUser = new CategoryUser
                {
                    CategoryId = categoryId,
                    UserId     = userId,
                };

                await this.categoryUsersRepository.AddAsync(categoryUser);

                await this.categoryUsersRepository.SaveChangesAsync();
            }
        }
コード例 #5
0
 public static CategoryUser MapCategoryToCategoryUser(Category category, User user)
 {
     if (user != null)
     {
         CategoryUser cuser = new CategoryUser()
         {
             Category   = category,
             User       = user,
             UserId     = user.UserId,
             CategoryId = category.CategoryId
         };
         return(cuser);
     }
     return(null);
 }
コード例 #6
0
        public async Task <IActionResult> AddUsers([FromRoute] Guid id, [FromBody] IEnumerable <AccessRights> users)
        {
            var category = await _context.Categories
                           .Include(c => c.Users)
                           .FirstOrDefaultAsync(c => c.Id == id);

            if (category == null)
            {
                return(NotFound());
            }

            var currentUser = await GetCurrentUser();

            if (!await _accessService.CanEdit(category.Id, currentUser))
            {
                return(Forbid());
            }

            foreach (var user in users)
            {
                if (!_context.Users.Any(u => u.Id == user.UserId))
                {
                    return(BadRequest());
                }

                var categoryUser = category.Users.SingleOrDefault(u => u.UserId == user.UserId);
                //todo: check if user has access to parent category (if parent category is set)
                // if user cannot read parent, he should not have access to child
                if (categoryUser == null)
                {
                    categoryUser = new CategoryUser {
                        CategoryId = category.Id, UserId = user.UserId
                    };
                    user.CopyTo(categoryUser);
                    category.Users.Add(categoryUser);
                }
                else
                {
                    user.CopyTo(categoryUser);
                }
            }

            await _context.SaveChangesAsync();

            return(Ok());
        }
コード例 #7
0
        public async Task HasAssignedCategory()
        {
            _parent.Public = false;
            var parentUser = new CategoryUser
            {
                UserId          = _user.Id,
                CategoryId      = _parent.Id,
                User            = _user,
                Category        = _parent,
                CanRead         = false,
                CanWrite        = true,
                CanChangeAccess = true
            };

            _parent.Users = new List <CategoryUser>
            {
                parentUser
            };

            AddDataToDb();
            await _context.SaveChangesAsync();

            var result = await _controller.GetAvailableCategories(new Sieve.Models.SieveModel());

            var okResult = result as OkObjectResult;

            Assert.NotNull(okResult);

            var categoriesResult = okResult.Value as IEnumerable <ListCategoryView>;

            Assert.NotNull(categoriesResult);

            var group = categoriesResult.Single();

            Assert.Equal(_parent.Name, group.Name);
            Assert.Equal(_parent.Id, group.Id);
            Assert.Equal(parentUser.CanRead, group.CanRead);
            Assert.Equal(parentUser.CanWrite, group.CanWrite);
            Assert.Equal(parentUser.CanChangeAccess, group.CanChangeAccess);
        }
コード例 #8
0
 public static CategoryUserUpdateRequestBuilder Update(int categoryId, string userId, CategoryUser categoryUser, bool override_ = false)
 {
     return(new CategoryUserUpdateRequestBuilder(categoryId, userId, categoryUser, override_));
 }
コード例 #9
0
 public static CategoryUserAddRequestBuilder Add(CategoryUser categoryUser)
 {
     return(new CategoryUserAddRequestBuilder(categoryUser));
 }
コード例 #10
0
ファイル: BaseTest.cs プロジェクト: lightest-dev/lightest-api
        public BaseTest()
        {
            _sieveProcessor      = GenerateSieveProcessor <Category>();
            _accessServiceMock   = GenerateAccessService <Category>();
            _claimsPrincipalMock = GenerateClaimsMock();
            _roleHelper          = GenerateRoleHelper();

            _checker = new Checker
            {
                Id   = Guid.NewGuid(),
                Name = "test",
                Code = "code"
            };

            _task = new TaskDefinition
            {
                Id        = Guid.NewGuid(),
                Public    = true,
                Points    = 100,
                Checker   = _checker,
                CheckerId = _checker.Id,
                Name      = "name",
                Tests     = new List <Test>(),
                Languages = new List <TaskLanguage>(),
                Users     = new List <Assignment>()
            };
            _task.Users.Add(new Assignment
            {
                UserId = _user.Id,
                TaskId = _task.Id
            });

            _parent = new Category
            {
                Id     = Guid.NewGuid(),
                Name   = "parent",
                Public = true
            };
            _child1 = new Category
            {
                Id       = Guid.NewGuid(),
                Name     = "child1",
                Public   = true,
                ParentId = _parent.Id,
                Parent   = _parent
            };
            _child2 = new Category
            {
                Id       = Guid.NewGuid(),
                Name     = "child2",
                Public   = false,
                ParentId = _parent.Id,
                Parent   = _parent
            };

            _parent.Tasks = new List <TaskDefinition>
            {
                _task
            };

            _parent.SubCategories = new List <Category>
            {
                _child1,
                _child2
            };
            _categoryUser = new CategoryUser
            {
                UserId     = _user.Id,
                CategoryId = _child2.Id,
                User       = _user,
                Category   = _child2
            };
            _child2.Users = new List <CategoryUser>
            {
                _categoryUser
            };
        }