public static bool CanChangeRoleOfMember(this AppUserRole caller, AppUserRole oldRole, AppUserRole newRole)
        {
            if (caller.IsNone() || oldRole.IsNone() || newRole.IsNone())
            {
                return(false);
            }
            if (!HasPermissionsToChangeRoleOfMember(caller))
            {
                return(false);
            }
            if (oldRole == newRole)
            {
                return(false);
            }
            if (oldRole.IsOwner() || newRole.IsOwner())
            {
                return(false);
            }
            if ((oldRole.IsScrumMaster() || newRole.IsScrumMaster()) && !caller.IsOwner())
            {
                return(false);
            }

            return(true);
        }
Esempio n. 2
0
        private async Task <AppUserRole> GetRoleIfMember(string userId, int projectId)
        {
            AppUserRole role = await _puRepo.GetRoleOfMember(userId, projectId);

            if (role.IsNone())
            {
                throw new NotFoundResponseException("Project not found or you don't have permissions.");
            }

            return(role);
        }
 public static bool CanViewListOfMembers(this AppUserRole role)
 {
     if (!role.IsNone())
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
 public static bool CanRemoveItself(this AppUserRole role)
 {
     if (role.IsOwner() || role.IsNone())
     {
         return(false);
     }
     else
     {
         return(true);
     }
 }
Esempio n. 5
0
        public async Task AddMemberAsync(string senderUserId, int projectId, string userId, AppUserRoleDto roleDto)
        {
            AppUserRole senderRole = await GetRoleIfMember(senderUserId, projectId);

            if (!senderRole.CanAddNewMember())
            {
                throw new ForbiddenResponseException("You haven't permissions to add members to this project");
            }

            if (!await _userRepo.ExistsWithId(userId))
            {
                throw new NotFoundResponseException("Cannot find user to add into project.");
            }

            if (!((await _puRepo.GetRoleOfMember(userId, projectId)).IsNone()))
            {
                throw new BadRequestResponseException("This user already exists in project.");
            }

            AppUserRole role = _mapper.Map <AppUserRoleDto, AppUserRole>(roleDto);

            if (role.IsNone())
            {
                throw new BadRequestResponseException("Given role is bad.");
            }

            if (role.IsOwner())
            {
                throw new BadRequestResponseException("Cannot add Owner to project.");
            }

            if (role.IsScrumMaster() && await _puRepo.DoesExistScrumMasterInProjectAsync(projectId))
            {
                throw new BadRequestResponseException("Scrum Master already exists in project.");
            }

            var pu = new ProjectUser()
            {
                ProjectId  = projectId,
                UserId     = userId,
                UserRoleId = role.Id
            };
            await _puRepo.CreateRecordAsync(pu);
        }
Esempio n. 6
0
        public async Task <ProjectMemberDto> GetMemberOfProjectAsync(string senderUserId, int projectId, string userId)
        {
            AppUserRole senderRole = await GetRoleIfMember(senderUserId, projectId);

            if (!senderRole.CanViewListOfMembers())
            {
                throw new ForbiddenResponseException("You cannot get list of members of this project");
            }

            AppUserRole role = await _puRepo.GetRoleOfMember(userId, projectId);

            if (!role.IsNone())
            {
                User u = await _userRepo.GetByIdAsync(userId);

                ProjectMemberDto dto = MakeProjectMemberDto(u, role);
                return(dto);
            }
            else
            {
                throw new NotFoundResponseException($"No member with id {userId} in project with id {projectId}");
            }
        }