diff --git a/internal/db/models/acme/acme_task_dao.go b/internal/db/models/acme/acme_task_dao.go index 784b1890..7d57730f 100644 --- a/internal/db/models/acme/acme_task_dao.go +++ b/internal/db/models/acme/acme_task_dao.go @@ -107,9 +107,17 @@ func (this *ACMETaskDAO) DisableAllTasksWithCertId(tx *dbs.Tx, certId int64) err } // CountAllEnabledACMETasks 计算所有任务数量 -func (this *ACMETaskDAO) CountAllEnabledACMETasks(tx *dbs.Tx, userId int64, isAvailable bool, isExpired bool, expiringDays int64, keyword string) (int64, error) { +func (this *ACMETaskDAO) CountAllEnabledACMETasks(tx *dbs.Tx, userId int64, isAvailable bool, isExpired bool, expiringDays int64, keyword string, userOnly bool) (int64, error) { var query = this.Query(tx) - query.Attr("userId", userId) // 这个条件必须加上 + if userId > 0 { + query.Attr("userId", userId) + } else { + if userOnly { + query.Gt("userId", 0) + } else { + query.Attr("userId", 0) + } + } if isAvailable || isExpired || expiringDays > 0 { query.Gt("certId", 0) @@ -139,9 +147,17 @@ func (this *ACMETaskDAO) CountAllEnabledACMETasks(tx *dbs.Tx, userId int64, isAv } // ListEnabledACMETasks 列出单页任务 -func (this *ACMETaskDAO) ListEnabledACMETasks(tx *dbs.Tx, userId int64, isAvailable bool, isExpired bool, expiringDays int64, keyword string, offset int64, size int64) (result []*ACMETask, err error) { +func (this *ACMETaskDAO) ListEnabledACMETasks(tx *dbs.Tx, userId int64, isAvailable bool, isExpired bool, expiringDays int64, keyword string, userOnly bool, offset int64, size int64) (result []*ACMETask, err error) { var query = this.Query(tx) - query.Attr("userId", userId) // 这个条件必须加上 + if userId > 0 { + query.Attr("userId", userId) + } else { + if userOnly { + query.Gt("userId", 0) + } else { + query.Attr("userId", 0) + } + } if isAvailable || isExpired || expiringDays > 0 { query.Gt("certId", 0) @@ -229,8 +245,8 @@ func (this *ACMETaskDAO) UpdateACMETask(tx *dbs.Tx, acmeTaskId int64, acmeUserId return err } -// CheckACMETask 检查权限 -func (this *ACMETaskDAO) CheckACMETask(tx *dbs.Tx, userId int64, acmeTaskId int64) (bool, error) { +// CheckUserACMETask 检查用户权限 +func (this *ACMETaskDAO) CheckUserACMETask(tx *dbs.Tx, userId int64, acmeTaskId int64) (bool, error) { var query = this.Query(tx) if userId > 0 { query.Attr("userId", userId) @@ -242,6 +258,15 @@ func (this *ACMETaskDAO) CheckACMETask(tx *dbs.Tx, userId int64, acmeTaskId int6 Exist() } +// FindACMETaskUserId 查找任务所属用户ID +func (this *ACMETaskDAO) FindACMETaskUserId(tx *dbs.Tx, taskId int64) (userId int64, err error) { + return this.Query(tx). + Pk(taskId). + Result("userId"). + FindInt64Col(0) +} + + // UpdateACMETaskCert 设置任务关联的证书 func (this *ACMETaskDAO) UpdateACMETaskCert(tx *dbs.Tx, taskId int64, certId int64) error { if taskId <= 0 { diff --git a/internal/rpc/services/service_acme_task.go b/internal/rpc/services/service_acme_task.go index b6cfea98..28b31f0d 100644 --- a/internal/rpc/services/service_acme_task.go +++ b/internal/rpc/services/service_acme_task.go @@ -65,7 +65,7 @@ func (this *ACMETaskService) CountAllEnabledACMETasks(ctx context.Context, req * req.UserId = userId } - count, err := acmemodels.SharedACMETaskDAO.CountAllEnabledACMETasks(tx, req.UserId, req.IsAvailable, req.IsExpired, int64(req.ExpiringDays), req.Keyword) + count, err := acmemodels.SharedACMETaskDAO.CountAllEnabledACMETasks(tx, req.UserId, req.IsAvailable, req.IsExpired, int64(req.ExpiringDays), req.Keyword, req.UserOnly) if err != nil { return nil, err } @@ -85,7 +85,7 @@ func (this *ACMETaskService) ListEnabledACMETasks(ctx context.Context, req *pb.L req.UserId = userId } - tasks, err := acmemodels.SharedACMETaskDAO.ListEnabledACMETasks(tx, req.UserId, req.IsAvailable, req.IsExpired, int64(req.ExpiringDays), req.Keyword, req.Offset, req.Size) + tasks, err := acmemodels.SharedACMETaskDAO.ListEnabledACMETasks(tx, req.UserId, req.IsAvailable, req.IsExpired, int64(req.ExpiringDays), req.Keyword, req.UserOnly, req.Offset, req.Size) if err != nil { return nil, err } @@ -255,7 +255,7 @@ func (this *ACMETaskService) UpdateACMETask(ctx context.Context, req *pb.UpdateA var tx = this.NullTx() - canAccess, err := acmemodels.SharedACMETaskDAO.CheckACMETask(tx, userId, req.AcmeTaskId) + canAccess, err := acmemodels.SharedACMETaskDAO.CheckUserACMETask(tx, userId, req.AcmeTaskId) if err != nil { return nil, err } @@ -279,7 +279,7 @@ func (this *ACMETaskService) DeleteACMETask(ctx context.Context, req *pb.DeleteA var tx = this.NullTx() - canAccess, err := acmemodels.SharedACMETaskDAO.CheckACMETask(tx, userId, req.AcmeTaskId) + canAccess, err := acmemodels.SharedACMETaskDAO.CheckUserACMETask(tx, userId, req.AcmeTaskId) if err != nil { return nil, err } @@ -303,7 +303,7 @@ func (this *ACMETaskService) RunACMETask(ctx context.Context, req *pb.RunACMETas var tx = this.NullTx() - canAccess, err := acmemodels.SharedACMETaskDAO.CheckACMETask(tx, userId, req.AcmeTaskId) + canAccess, err := acmemodels.SharedACMETaskDAO.CheckUserACMETask(tx, userId, req.AcmeTaskId) if err != nil { return nil, err } @@ -329,7 +329,7 @@ func (this *ACMETaskService) FindEnabledACMETask(ctx context.Context, req *pb.Fi var tx = this.NullTx() - canAccess, err := acmemodels.SharedACMETaskDAO.CheckACMETask(tx, userId, req.AcmeTaskId) + canAccess, err := acmemodels.SharedACMETaskDAO.CheckUserACMETask(tx, userId, req.AcmeTaskId) if err != nil { return nil, err } @@ -440,3 +440,40 @@ func (this *ACMETaskService) FindEnabledACMETask(ctx context.Context, req *pb.Fi SslCert: pbCert, }}, nil } + +// FindACMETaskUser 查找任务所属用户 +func (this *ACMETaskService) FindACMETaskUser(ctx context.Context, req *pb.FindACMETaskUserRequest) (*pb.FindACMETaskUserResponse, error) { + _, err := this.ValidateAdmin(ctx) + if err != nil { + return nil, err + } + + var tx = this.NullTx() + userId, err := acmemodels.SharedACMETaskDAO.FindACMETaskUserId(tx, req.AcmeTaskId) + if err != nil { + return nil, err + } + if userId <= 0 { + return &pb.FindACMETaskUserResponse{User: nil}, nil + } + + user, err := models.SharedUserDAO.FindEnabledBasicUser(tx, userId) + if err != nil { + return nil, err + } + if user == nil { + return &pb.FindACMETaskUserResponse{ + User: &pb.User{ + Id: userId, + }, + }, nil + } + + return &pb.FindACMETaskUserResponse{ + User: &pb.User{ + Id: userId, + Username: user.Username, + Fullname: user.Fullname, + }, + }, nil +}