{"record":{"id":"2633985b90f0d613","repo":"theonedev/onedev","slug":"no-permission-to-write-code-in-pull-request-source","errorCode":null,"errorMessage":"No permission to write code in pull request source project","messagePattern":"No permission to write code in pull request source project","errorType":"http","errorClass":"UnauthorizedException","httpStatus":403,"severity":"error","filePath":"server-core/src/main/java/io/onedev/server/ai/TodResource.java","lineNumber":1017,"sourceCode":"\n    @Path(\"/get-pull-request\")\n    @GET\n    public Map<String, Object> getPullRequestDetail(\n                @QueryParam(\"currentProject\") @NotNull String currentProjectPath, \n                @QueryParam(\"reference\") @NotNull String pullRequestReference, \n                @QueryParam(\"forWrite\") Boolean forWrite) {\n        if (SecurityUtils.getUser() == null)\n            throw new UnauthenticatedException();\n\n        var currentProject = getProject(currentProjectPath);\n        var pullRequest = getPullRequest(currentProject, pullRequestReference);\n\n        if (forWrite != null && forWrite) {\n            if (pullRequest.getSourceProject() == null)\n                throw new NotAcceptableException(\"Pull request source project no longer exists\");\n\n            if (!SecurityUtils.canWriteCode(pullRequest.getSourceProject()))            \n                throw new UnauthorizedException(\"No permission to write code in pull request source project\");\n        }\n\n        return PullRequestHelper.getDetail(currentProject, pullRequest);\n    }\n\n    @Path(\"/get-pull-request-comments\")\n    @GET\n    public List<Map<String, Object>> getPullRequestComments(\n                @QueryParam(\"currentProject\") @NotNull String currentProjectPath, \n                @QueryParam(\"reference\") @NotNull String pullRequestReference) {\n        if (SecurityUtils.getUser() == null)\n            throw new UnauthenticatedException();\n\n        var currentProject = getProject(currentProjectPath);\n        var pullRequest = getPullRequest(currentProject, pullRequestReference);\n                \n        return PullRequestHelper.getComments(pullRequest);\n    }","sourceCodeStart":999,"sourceCodeEnd":1035,"githubUrl":"https://github.com/theonedev/onedev/blob/d44925c47c37992c828ea673a5f9620539bc3ff2/server-core/src/main/java/io/onedev/server/ai/TodResource.java#L999-L1035","documentation":"When get-pull-request is called with forWrite=true, the endpoint additionally requires the caller to have code-write permission in the pull request's source project; lacking it, the request is rejected before returning write-oriented data.","triggerScenarios":"Thrown at server-core/src/main/java/io/onedev/server/ai/TodResource.java:1017 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Request forWrite=false if only read data is needed.","Obtain code write permission (commit authorizations) in the source project."],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"d44925c47c37992c828ea673a5f9620539bc3ff2","analyzedAt":"2026-09-06T07:18:27.995Z","contentChangedAt":"2026-09-06T07:18:27.995Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}