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 <[email protected]>
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,

Reply via email to