From dd5c91e901f6c97daed27db92945f8431891d44c Mon Sep 17 00:00:00 2001 From: ychao_1983 Date: Mon, 6 Dec 2021 15:40:44 +0800 Subject: [PATCH] =?UTF-8?q?=20fix-969=E7=BB=99=E5=89=8D=E7=AB=AF=E6=8F=90?= =?UTF-8?q?=E4=BE=9B=E5=8F=98=E9=87=8F=E5=8F=AF=E4=BB=A5=E5=88=A4=E6=96=AD?= =?UTF-8?q?=E8=B0=83=E8=AF=95=EF=BC=8C=E5=88=A0=E9=99=A4=E7=AD=89=E6=8C=89?= =?UTF-8?q?=E9=92=AE=E6=98=AF=E5=90=A6=E8=A6=81=E7=BD=AE=E7=81=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- models/cloudbrain.go | 1 + modules/cloudbrain/cloudbrain.go | 36 ++++++++++++++++++++++++++++-------- routers/repo/cloudbrain.go | 6 ++++-- routers/repo/modelarts.go | 13 ++++++++++++- 4 files changed, 45 insertions(+), 11 deletions(-) diff --git a/models/cloudbrain.go b/models/cloudbrain.go index 5b06d2581..8ecacb4fe 100755 --- a/models/cloudbrain.go +++ b/models/cloudbrain.go @@ -91,6 +91,7 @@ type Cloudbrain struct { DeletedAt time.Time `xorm:"deleted"` CanDebug bool `xorm:"-"` CanDel bool `xorm:"-"` + CanModify bool `xorm:"-"` Type int VersionID int64 //版本id diff --git a/modules/cloudbrain/cloudbrain.go b/modules/cloudbrain/cloudbrain.go index 43419e138..299133290 100755 --- a/modules/cloudbrain/cloudbrain.go +++ b/modules/cloudbrain/cloudbrain.go @@ -29,9 +29,7 @@ var ( ResourceSpecs *models.ResourceSpecs ) -func isAdminOrOwnerOrJobCreater(ctx *context.Context, jobId string) bool { - - job, err := models.GetCloudbrainByJobID(jobId) +func isAdminOrOwnerOrJobCreater(ctx *context.Context, job *models.Cloudbrain, err error) bool { if err != nil { return ctx.IsUserRepoOwner() || ctx.IsUserSiteAdmin() @@ -41,9 +39,29 @@ func isAdminOrOwnerOrJobCreater(ctx *context.Context, jobId string) bool { } -func isAdminOrJobCreater(ctx *context.Context, jobId string) bool { +func CanDeleteDebugJob(ctx *context.Context, job *models.Cloudbrain) bool { + + if job.Status != string(models.JobStopped) && job.Status != string(models.JobFailed) && job.Status != string(models.ModelArtsStartFailed) && job.Status != string(models.ModelArtsCreateFailed) { + return false + } + return isAdminOrOwnerOrJobCreater(ctx, job, nil) +} + +func CanDeleteTrainJob(ctx *context.Context, job *models.Cloudbrain) bool { + + return isAdminOrOwnerOrJobCreater(ctx, job, nil) +} + +func CanCreateOrDebugJob(ctx *context.Context) bool { + return ctx.Repo.CanWrite(models.UnitTypeCloudBrain) +} + +func CanModifyJob(ctx *context.Context, job *models.Cloudbrain) bool { - job, err := models.GetCloudbrainByJobID(jobId) + return isAdminOrJobCreater(ctx, job, nil) +} + +func isAdminOrJobCreater(ctx *context.Context, job *models.Cloudbrain, err error) bool { if err != nil { return ctx.IsUserSiteAdmin() @@ -57,7 +75,9 @@ func AdminOrOwnerOrJobCreaterRight(ctx *context.Context) { var jobID = ctx.Params(":jobid") - if !isAdminOrOwnerOrJobCreater(ctx, jobID) { + job, err := models.GetCloudbrainByJobID(jobID) + + if !isAdminOrOwnerOrJobCreater(ctx, job, err) { ctx.NotFound(ctx.Req.URL.RequestURI(), nil) } @@ -67,8 +87,8 @@ func AdminOrOwnerOrJobCreaterRight(ctx *context.Context) { func AdminOrJobCreaterRight(ctx *context.Context) { var jobID = ctx.Params(":jobid") - - if !isAdminOrJobCreater(ctx, jobID) { + job, err := models.GetCloudbrainByJobID(jobID) + if !isAdminOrJobCreater(ctx, job, err) { ctx.NotFound(ctx.Req.URL.RequestURI(), nil) } diff --git a/routers/repo/cloudbrain.go b/routers/repo/cloudbrain.go index c74d618d5..b2ded0752 100755 --- a/routers/repo/cloudbrain.go +++ b/routers/repo/cloudbrain.go @@ -74,12 +74,13 @@ func CloudBrainIndex(ctx *context.Context) { timestamp := time.Now().Unix() for i, task := range ciTasks { if task.Status == string(models.JobRunning) && (timestamp-int64(task.Cloudbrain.CreatedUnix) > 10) { - ciTasks[i].CanDebug = true + ciTasks[i].CanDebug = cloudbrain.CanCreateOrDebugJob(ctx) } else { ciTasks[i].CanDebug = false } - ciTasks[i].CanDel = models.CanDelJob(ctx.IsSigned, ctx.User, task) + ciTasks[i].CanDel = cloudbrain.CanDeleteDebugJob(ctx, &task.Cloudbrain) + } pager := context.NewPagination(int(count), setting.UI.IssuePagingNum, page, 5) @@ -88,6 +89,7 @@ func CloudBrainIndex(ctx *context.Context) { ctx.Data["PageIsCloudBrain"] = true ctx.Data["Tasks"] = ciTasks + ctx.Data["CanCreate"] = cloudbrain.CanCreateOrDebugJob(ctx) ctx.HTML(200, tplCloudBrainIndex) } diff --git a/routers/repo/modelarts.go b/routers/repo/modelarts.go index 229e029b4..f3acae8d1 100755 --- a/routers/repo/modelarts.go +++ b/routers/repo/modelarts.go @@ -4,6 +4,7 @@ import ( "encoding/json" "errors" "io" + "io/ioutil" "net/http" "os" "path" @@ -11,6 +12,8 @@ import ( "strings" "time" + "code.gitea.io/gitea/modules/cloudbrain" + "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/auth" "code.gitea.io/gitea/modules/base" @@ -68,10 +71,11 @@ func NotebookIndex(ctx *context.Context) { for i, task := range ciTasks { if task.Status == string(models.JobRunning) { - ciTasks[i].CanDebug = true + ciTasks[i].CanDebug = cloudbrain.CanCreateOrDebugJob(ctx) } else { ciTasks[i].CanDebug = false } + ciTasks[i].CanDel = cloudbrain.CanDeleteDebugJob(ctx, &task.Cloudbrain) } pager := context.NewPagination(int(count), setting.UI.IssuePagingNum, page, 5) @@ -80,6 +84,7 @@ func NotebookIndex(ctx *context.Context) { ctx.Data["PageIsCloudBrain"] = true ctx.Data["Tasks"] = ciTasks + ctx.Data["CanCreate"] = cloudbrain.CanCreateOrDebugJob(ctx) ctx.HTML(200, tplModelArtsNotebookIndex) } @@ -301,12 +306,18 @@ func TrainJobIndex(ctx *context.Context) { return } + for i, task := range tasks { + tasks[i].CanDel = cloudbrain.CanDeleteTrainJob(ctx, &task.Cloudbrain) + tasks[i].CanModify = cloudbrain.CanModifyJob(ctx, &task.Cloudbrain) + } + pager := context.NewPagination(int(count), setting.UI.IssuePagingNum, page, 5) pager.SetDefaultParams(ctx) ctx.Data["Page"] = pager ctx.Data["PageIsCloudBrain"] = true ctx.Data["Tasks"] = tasks + ctx.Data["CanCreate"] = cloudbrain.CanCreateOrDebugJob(ctx) ctx.HTML(200, tplModelArtsTrainJobIndex) }