You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@answer.apache.org by li...@apache.org on 2024/03/14 02:46:28 UTC

(incubator-answer) branch feat/1.3.0/review updated: feat(review): add review permission

This is an automated email from the ASF dual-hosted git repository.

linkinstar pushed a commit to branch feat/1.3.0/review
in repository https://gitbox.apache.org/repos/asf/incubator-answer.git


The following commit(s) were added to refs/heads/feat/1.3.0/review by this push:
     new 4467174f feat(review): add review permission
4467174f is described below

commit 4467174f8086268e8681fffd79139cc2a3ea2c3d
Author: LinkinStars <li...@foxmail.com>
AuthorDate: Thu Mar 14 10:31:46 2024 +0800

    feat(review): add review permission
---
 internal/controller/report_controller.go  |  9 +++++++--
 internal/controller/review_controller.go  | 11 +++++++++--
 internal/schema/report_schema.go          |  5 ++++-
 internal/schema/review_schema.go          |  2 ++
 internal/service/report/report_service.go |  3 +++
 internal/service/review/review_service.go |  3 +++
 6 files changed, 28 insertions(+), 5 deletions(-)

diff --git a/internal/controller/report_controller.go b/internal/controller/report_controller.go
index 484c7516..75ceb823 100644
--- a/internal/controller/report_controller.go
+++ b/internal/controller/report_controller.go
@@ -120,7 +120,8 @@ func (rc *ReportController) GetUnreviewedReportPostPage(ctx *gin.Context) {
 		return
 	}
 
-	// TODO: check permission
+	req.UserID = middleware.GetLoginUserIDFromContext(ctx)
+	req.IsAdmin = middleware.GetUserIsAdminModerator(ctx)
 
 	resp, err := rc.reportService.GetUnreviewedReportPostPage(ctx, req)
 	handler.HandleResponse(ctx, err, resp)
@@ -143,8 +144,12 @@ func (rc *ReportController) ReviewReport(ctx *gin.Context) {
 		return
 	}
 
-	// TODO: check permission
 	req.UserID = middleware.GetLoginUserIDFromContext(ctx)
+	req.IsAdmin = middleware.GetUserIsAdminModerator(ctx)
+	if !req.IsAdmin {
+		handler.HandleResponse(ctx, errors.Forbidden(reason.ForbiddenError), nil)
+		return
+	}
 
 	err := rc.reportService.ReviewReport(ctx, req)
 	handler.HandleResponse(ctx, err, nil)
diff --git a/internal/controller/review_controller.go b/internal/controller/review_controller.go
index 967a2a16..435cefa7 100644
--- a/internal/controller/review_controller.go
+++ b/internal/controller/review_controller.go
@@ -22,12 +22,14 @@ package controller
 import (
 	"github.com/apache/incubator-answer/internal/base/handler"
 	"github.com/apache/incubator-answer/internal/base/middleware"
+	"github.com/apache/incubator-answer/internal/base/reason"
 	"github.com/apache/incubator-answer/internal/schema"
 	"github.com/apache/incubator-answer/internal/service/action"
 	"github.com/apache/incubator-answer/internal/service/rank"
 	"github.com/apache/incubator-answer/internal/service/review"
 	"github.com/apache/incubator-answer/plugin"
 	"github.com/gin-gonic/gin"
+	"github.com/segmentfault/pacman/errors"
 )
 
 // ReviewController review controller
@@ -67,7 +69,8 @@ func (rc *ReviewController) GetUnreviewedPostPage(ctx *gin.Context) {
 		return
 	}
 
-	// TODO: check permission
+	req.UserID = middleware.GetLoginUserIDFromContext(ctx)
+	req.IsAdmin = middleware.GetUserIsAdminModerator(ctx)
 
 	req.ReviewerMapping = make(map[string]string)
 	_ = plugin.CallReviewer(func(base plugin.Reviewer) error {
@@ -97,8 +100,12 @@ func (rc *ReviewController) UpdateReview(ctx *gin.Context) {
 		return
 	}
 
-	// TODO: check permission
 	req.UserID = middleware.GetLoginUserIDFromContext(ctx)
+	req.IsAdmin = middleware.GetUserIsAdminModerator(ctx)
+	if !req.IsAdmin {
+		handler.HandleResponse(ctx, errors.Forbidden(reason.ForbiddenError), nil)
+		return
+	}
 
 	err := rc.reviewService.UpdateReview(ctx, req)
 	handler.HandleResponse(ctx, err, nil)
diff --git a/internal/schema/report_schema.go b/internal/schema/report_schema.go
index 908e0451..b80e7c26 100644
--- a/internal/schema/report_schema.go
+++ b/internal/schema/report_schema.go
@@ -93,7 +93,9 @@ type GetReportListPageResp struct {
 
 // GetUnreviewedReportPostPageReq get unreviewed report post page request
 type GetUnreviewedReportPostPageReq struct {
-	Page int `json:"page" form:"page"`
+	Page    int    `json:"page" form:"page"`
+	UserID  string `json:"-"`
+	IsAdmin bool   `json:"-"`
 }
 
 // ReviewReportReq review report request
@@ -106,4 +108,5 @@ type ReviewReportReq struct {
 	Content       string     `validate:"omitempty,notblank,gte=6,lte=65535" json:"content"`
 	Tags          []*TagItem `validate:"omitempty,dive" json:"tags"`
 	UserID        string     `json:"-"`
+	IsAdmin       bool       `json:"-"`
 }
diff --git a/internal/schema/review_schema.go b/internal/schema/review_schema.go
index bda52204..556e4df3 100644
--- a/internal/schema/review_schema.go
+++ b/internal/schema/review_schema.go
@@ -10,6 +10,7 @@ type UpdateReviewReq struct {
 	ReviewID int    `validate:"required" json:"review_id"`
 	Status   string `validate:"required,oneof=approve reject" json:"status"`
 	UserID   string `json:"-"`
+	IsAdmin  bool   `json:"-"`
 }
 
 func (r *UpdateReviewReq) IsApprove() bool {
@@ -26,6 +27,7 @@ type GetUnreviewedPostPageReq struct {
 	Page            int               `validate:"omitempty" form:"page"`
 	ReviewerMapping map[string]string `json:"-"`
 	UserID          string            `json:"-"`
+	IsAdmin         bool              `json:"-"`
 }
 
 func (r *GetUnreviewedPostPageReq) Check() (errField []*validator.FormErrorField, err error) {
diff --git a/internal/service/report/report_service.go b/internal/service/report/report_service.go
index b59e762f..8b9d28f7 100644
--- a/internal/service/report/report_service.go
+++ b/internal/service/report/report_service.go
@@ -106,6 +106,9 @@ func (rs *ReportService) AddReport(ctx context.Context, req *schema.AddReportReq
 // GetUnreviewedReportPostPage get unreviewed report post page
 func (rs *ReportService) GetUnreviewedReportPostPage(ctx context.Context, req *schema.GetUnreviewedReportPostPageReq) (
 	pageModel *pager.PageModel, err error) {
+	if !req.IsAdmin {
+		return pager.NewPageModel(0, make([]*schema.GetReportListPageResp, 0)), nil
+	}
 	lang := handler.GetLangByCtx(ctx)
 	reports, total, err := rs.reportRepo.GetReportListPage(ctx, &schema.GetReportListPageDTO{
 		Page:     req.Page,
diff --git a/internal/service/review/review_service.go b/internal/service/review/review_service.go
index 217a8877..bb58f011 100644
--- a/internal/service/review/review_service.go
+++ b/internal/service/review/review_service.go
@@ -326,6 +326,9 @@ func (cs *ReviewService) GetReviewPendingCount(ctx context.Context) (count int64
 // GetUnreviewedPostPage get review page
 func (cs *ReviewService) GetUnreviewedPostPage(ctx context.Context, req *schema.GetUnreviewedPostPageReq) (
 	pageModel *pager.PageModel, err error) {
+	if !req.IsAdmin {
+		return pager.NewPageModel(0, make([]*schema.GetUnreviewedPostPageResp, 0)), nil
+	}
 	cond := &entity.Review{
 		ObjectID: req.ObjectID,
 		Status:   entity.ReviewStatusPending,