public IActionResult Assign([FromRoute] Guid project_id, [FromBody] PermissionRoleSetupM model) { try { JwtClaimM jwt_claim = _jwtAuth.GetClaims(Request); if (model.RoleId.Equals(RoleID.Project_Manager)) { _permission.EnsureProjectOwner(jwt_claim.UserId, project_id); _permission.AssignProjectManager(model.AssignedUserId, project_id); } else { if (jwt_claim.AdminUserId.Equals(model.AssignedUserId)) { return(Forbid()); } if (model.RoleId.Equals(RoleID.Admin) || model.RoleId.Equals(RoleID.Project_Manager)) { return(Forbid()); } _permission.EnsureProjectManager(jwt_claim.UserId, project_id); IList <Guid> repository_ids = _projectRepository.GetRepositoryIds(project_id); if (repository_ids.Count != 0) { if (repository_ids.Count == 2) { if (repository_ids[0].Equals(repository_ids[1])) { repository_ids.RemoveAt(1); } } foreach (var repository_id in repository_ids) { if (!_collaborator.HasCollab(model.AssignedUserId, repository_id)) { Guid account_id = _account.GetMainAccountId(model.AssignedUserId); if (!account_id.Equals(Guid.Empty)) { var assigned_user_account_requirement = _account.GetGHUserRequirement(account_id); var pm_repo_requirement = _repository.GetGHRepositoryRequirement(repository_id); int gh_invitation_id = _gHCollaborator.AddCollaborator(pm_repo_requirement.GHUser.Name, pm_repo_requirement.RepositoryName, pm_repo_requirement.GHUser.AccessToken, assigned_user_account_requirement.Name).Id; _gHInvitation.Accept(assigned_user_account_requirement.Name, assigned_user_account_requirement.AccessToken, gh_invitation_id); _collaborator.AddCollab(account_id, repository_id); } } } } _permission.AssignProjectMember(model.AssignedUserId, project_id, model.RoleId); } return(Ok("Assigned")); } catch (Exception e) { return(GetError(e)); } }