Exemple #1
0
        private bool HasAccessAsManager(int memberId, MemberProjectRoleView projectRole)
        {
            var managerRoleId = Uow.ProjectRoleRepository.GetManagerRoleId();
            var memberRoleId  = Uow.ProjectRoleRepository.GetMemberRoleId();

            //check if current user is manager on selected project and is trying to assign team member
            var hasAccessAsManager = Uow.MemberProjectRoleRepository.LinkedCacheGetList()
                                     .Any(r => r.ProjectId == projectRole.ProjectId && r.MemberId == memberId && r.RoleId == managerRoleId) && projectRole.RoleId == memberRoleId;

            return(hasAccessAsManager);
        }
        public IActionResult Create([FromBody] MemberProjectRoleView projectRole)
        {
            try
            {
                var value       = _service.Create(projectRole);
                var locationUri = $"{Request.Host}/{BaseODataRoute}/MemberProjectRoles({value.Id})";

                return(Created(locationUri, value));
            }
            catch (Exception e)
            {
                return(SendErrorODataResponse(e));
            }
        }
        public IActionResult Patch([FromODataUri] int id, [FromBody] MemberProjectRoleView projectRole)
        {
            projectRole.Id = id;

            try
            {
                var value = _service.Patch(projectRole);
                return(new ObjectResult(value));
            }
            catch (Exception e)
            {
                return(SendErrorODataResponse(e));
            }
        }
Exemple #4
0
        public MemberProjectRoleView Create(MemberProjectRoleView memberProjectRoleView)
        {
            var currentMember = Uow.MemberRepository.LinkedCacheGetByName(ImpersonatedUserName);

            if (currentMember == null)
            {
                throw new CoralTimeEntityNotFoundException($"Member with userName {ImpersonatedUserName} not found.");
            }

            if (!currentMember.User.IsActive)
            {
                throw new CoralTimeEntityNotFoundException($"Member with userName {ImpersonatedUserName} is not active.");
            }

            var memberProjectRole = Uow.MemberProjectRoleRepository.LinkedCacheGetList()
                                    .FirstOrDefault(r => r.ProjectId == memberProjectRoleView.ProjectId && r.MemberId == memberProjectRoleView.MemberId);

            if (memberProjectRole != null)
            {
                throw new CoralTimeAlreadyExistsException($"Project role with projectId = {memberProjectRoleView.ProjectId} and memberId = {memberProjectRoleView.MemberId} already exist");
            }

            //check if current user is manager on selected project and is trying to assign team member
            var hasAccessAsManager = HasAccessAsManager(currentMember.Id, memberProjectRoleView);

            if (currentMember.User.IsAdmin || hasAccessAsManager)
            {
                memberProjectRole = new MemberProjectRole
                {
                    MemberId  = memberProjectRoleView.MemberId,
                    ProjectId = memberProjectRoleView.ProjectId,
                    RoleId    = memberProjectRoleView.RoleId
                };

                Uow.MemberProjectRoleRepository.Insert(memberProjectRole);
                Uow.Save();
                Uow.MemberProjectRoleRepository.LinkedCacheClear();

                UpdateIsManager(memberProjectRoleView.MemberId);

                var memberProjectRoleByIdResult = Uow.MemberProjectRoleRepository.LinkedCacheGetById(memberProjectRole.Id);

                var memberProjectRoleViewResult = memberProjectRoleByIdResult.GetView(Mapper, _avatarService.GetUrlIcon(memberProjectRole.MemberId));

                return(memberProjectRoleViewResult);
            }

            throw new CoralTimeForbiddenException($"Member with id = {currentMember.Id} is not allowed to create MemberProjectRole on project with id = {memberProjectRoleView.ProjectId} and role with id = {memberProjectRoleView.RoleId}");
        }
        public IActionResult Create([FromBody] MemberProjectRoleView projectRole)
        {
            try
            {
                var value       = _service.Create(this.GetUserNameWithImpersonation(), projectRole);
                var locationUri = $"{Request.Host}/api/v1/odata/MemberProjectRoles({value.Id})";

                return(Created(locationUri, value));
            }
            catch (Exception e)
            {
                _logger.LogWarning($"Create method with parameter ({JsonConvert.SerializeObject(projectRole)});\n {e}");
                var errors = ExceptionsChecker.CheckProjectRolesException(e);
                return(BadRequest(errors));
            }
        }
        public IActionResult Patch(int id, [FromBody] MemberProjectRoleView projectRole)
        {
            projectRole.Id = id;

            try
            {
                var value = _service.Patch(this.GetUserNameWithImpersonation(), projectRole);
                return(new ObjectResult(value));
            }
            catch (Exception e)
            {
                _logger.LogWarning($"Patch method with parameters ({id}, {projectRole});\n {e}");
                var errors = ExceptionsChecker.CheckProjectRolesException(e);
                return(BadRequest(errors));
            }
        }
        public MemberProjectRoleView Patch(MemberProjectRoleView projectRole)
        {
            var memberByUserName = Uow.MemberRepository.LinkedCacheGetByName(InpersonatedUserName);

            if (memberByUserName == null)
            {
                throw new CoralTimeEntityNotFoundException($"Member with userName = {InpersonatedUserName} not found.");
            }

            if (!memberByUserName.User.IsActive)
            {
                throw new CoralTimeEntityNotFoundException($"Member with userName = {InpersonatedUserName} is not active.");
            }

            var memberProjectRoleById = Uow.MemberProjectRoleRepository.GetById(projectRole.Id);

            if (memberProjectRoleById == null)
            {
                throw new CoralTimeEntityNotFoundException($"ProjectRole with id = {projectRole.Id} not found");
            }

            var hasAccessAsManager = HasAccessAsManager(memberByUserName.Id, projectRole);

            if (memberByUserName.User.IsAdmin || hasAccessAsManager)
            {
                memberProjectRoleById.RoleId = projectRole.RoleId;

                Uow.MemberProjectRoleRepository.Update(memberProjectRoleById);
                Uow.Save();
                Uow.MemberProjectRoleRepository.LinkedCacheClear();

                UpdateIsManager(memberProjectRoleById.MemberId);

                var memberProjectRoleByIdResult = Uow.MemberProjectRoleRepository.LinkedCacheGetById(projectRole.Id);

                var model = memberProjectRoleByIdResult.GetViewWithGlobalProjects(Mapper);
                AddIconUrl(model);
                return(model);
            }

            throw new CoralTimeForbiddenException($"Member with id = {memberByUserName.Id} is not allowed to patch projectRole on project with id = {projectRole.ProjectId} and role with id = {projectRole.RoleId}");
        }
 private void AddIconUrl(MemberProjectRoleView item)
 {
     _avatarService.AddIconUrlInViewModel(item);
 }