From 96c0baa7f62e9a21a29cc25acb0eb68e347957b7 Mon Sep 17 00:00:00 2001 From: aichy126 <16996097+aichy126@users.noreply.github.com> Date: Tue, 7 Mar 2023 17:35:20 +0800 Subject: [PATCH 1/2] update answer --- internal/service/answer_service.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/internal/service/answer_service.go b/internal/service/answer_service.go index a5a23bbe..5d854b5d 100644 --- a/internal/service/answer_service.go +++ b/internal/service/answer_service.go @@ -92,16 +92,14 @@ func (as *AnswerService) RemoveAnswer(ctx context.Context, req *schema.RemoveAns if answerInfo.Accepted == schema.AnswerAcceptedEnable { return errors.BadRequest(reason.AnswerCannotDeleted) } - questionInfo, exist, err := as.questionRepo.GetQuestion(ctx, answerInfo.QuestionID) + _, exist, err := as.questionRepo.GetQuestion(ctx, answerInfo.QuestionID) if err != nil { return errors.BadRequest(reason.AnswerCannotDeleted) } if !exist { return errors.BadRequest(reason.AnswerCannotDeleted) } - if questionInfo.AcceptedAnswerID != "" { - return errors.BadRequest(reason.AnswerCannotDeleted) - } + } // user add question count From 4c1c56713e6d113139ec63670ac6588d639df770 Mon Sep 17 00:00:00 2001 From: aichy126 <16996097+aichy126@users.noreply.github.com> Date: Tue, 7 Mar 2023 17:56:51 +0800 Subject: [PATCH 2/2] update answer --- internal/controller/answer_controller.go | 18 ++++++++++++++++++ internal/schema/answer_schema.go | 2 ++ 2 files changed, 20 insertions(+) diff --git a/internal/controller/answer_controller.go b/internal/controller/answer_controller.go index 684988ef..b2c8225b 100644 --- a/internal/controller/answer_controller.go +++ b/internal/controller/answer_controller.go @@ -136,6 +136,24 @@ func (ac *AnswerController) Add(ctx *gin.Context) { handler.HandleResponse(ctx, nil, nil) return } + + canList, err := ac.rankService.CheckOperationPermissions(ctx, req.UserID, []string{ + permission.AnswerEdit, + permission.AnswerDelete, + }) + if err != nil { + handler.HandleResponse(ctx, err, nil) + return + } + + objectOwner := ac.rankService.CheckOperationObjectOwner(ctx, req.UserID, info.ID) + req.CanEdit = canList[0] || objectOwner + req.CanDelete = canList[1] || objectOwner + if !can { + handler.HandleResponse(ctx, errors.Forbidden(reason.RankFailToMeetTheCondition), nil) + return + } + info.MemberActions = permission.GetAnswerPermission(ctx, req.UserID, info.UserID, req.CanEdit, req.CanDelete) handler.HandleResponse(ctx, nil, gin.H{ "info": info, "question": questionInfo, diff --git a/internal/schema/answer_schema.go b/internal/schema/answer_schema.go index 3a67f2bf..e76bb625 100644 --- a/internal/schema/answer_schema.go +++ b/internal/schema/answer_schema.go @@ -24,6 +24,8 @@ type AnswerAddReq struct { Content string `validate:"required,notblank,gte=6,lte=65535" json:"content"` HTML string `json:"-"` UserID string `json:"-"` + CanEdit bool `json:"-"` + CanDelete bool `json:"-"` } func (req *AnswerAddReq) Check() (errFields []*validator.FormErrorField, err error) {