From afa66cb9f6643ba8859509eaf896ccb4b3c796e6 Mon Sep 17 00:00:00 2001 From: LinkinStar Date: Thu, 24 Nov 2022 15:24:04 +0800 Subject: [PATCH] refactor: extract is admin flag from context --- internal/base/middleware/auth.go | 17 +++++++++----- internal/controller/answer_controller.go | 12 ++++------ internal/controller/question_controller.go | 27 +++++++++------------- internal/controller/tag_controller.go | 3 +-- 4 files changed, 27 insertions(+), 32 deletions(-) diff --git a/internal/base/middleware/auth.go b/internal/base/middleware/auth.go index 813effe3..e793d3c7 100644 --- a/internal/base/middleware/auth.go +++ b/internal/base/middleware/auth.go @@ -113,15 +113,20 @@ func (am *AuthUserMiddleware) CmsAuth() gin.HandlerFunc { // GetLoginUserIDFromContext get user id from context func GetLoginUserIDFromContext(ctx *gin.Context) (userID string) { - userInfo, exist := ctx.Get(ctxUUIDKey) - if !exist { + userInfo := GetUserInfoFromContext(ctx) + if userInfo == nil { return "" } - u, ok := userInfo.(*entity.UserCacheInfo) - if !ok { - return "" + return userInfo.UserID +} + +// GetIsAdminFromContext get user is admin from context +func GetIsAdminFromContext(ctx *gin.Context) (isAdmin bool) { + userInfo := GetUserInfoFromContext(ctx) + if userInfo == nil { + return false } - return u.UserID + return userInfo.IsAdmin } // GetUserInfoFromContext get user info from context diff --git a/internal/controller/answer_controller.go b/internal/controller/answer_controller.go index 81129227..6cc3edc2 100644 --- a/internal/controller/answer_controller.go +++ b/internal/controller/answer_controller.go @@ -51,12 +51,12 @@ func (ac *AnswerController) RemoveAnswer(ctx *gin.Context) { } req.UserID = middleware.GetLoginUserIDFromContext(ctx) + req.IsAdmin = middleware.GetIsAdminFromContext(ctx) if can, err := ac.rankService.CheckRankPermission(ctx, req.UserID, rank.AnswerDeleteRank); err != nil || !can { handler.HandleResponse(ctx, err, errors.Forbidden(reason.RankFailToMeetTheCondition)) return } - userinfo := middleware.GetUserInfoFromContext(ctx) - req.IsAdmin = userinfo.IsAdmin + err := ac.answerService.RemoveAnswer(ctx, req) handler.HandleResponse(ctx, err, nil) } @@ -148,8 +148,7 @@ func (ac *AnswerController) Update(ctx *gin.Context) { return } req.UserID = middleware.GetLoginUserIDFromContext(ctx) - userinfo := middleware.GetUserInfoFromContext(ctx) - req.IsAdmin = userinfo.IsAdmin + req.IsAdmin = middleware.GetIsAdminFromContext(ctx) if can, err := ac.rankService.CheckRankPermission(ctx, req.UserID, rank.AnswerEditRank); err != nil || !can { handler.HandleResponse(ctx, err, errors.Forbidden(reason.RankFailToMeetTheCondition)) @@ -193,10 +192,7 @@ func (ac *AnswerController) AnswerList(ctx *gin.Context) { return } req.LoginUserID = middleware.GetLoginUserIDFromContext(ctx) - userinfo := middleware.GetUserInfoFromContext(ctx) - if userinfo != nil { - req.IsAdmin = userinfo.IsAdmin - } + req.IsAdmin = middleware.GetIsAdminFromContext(ctx) list, count, err := ac.answerService.SearchList(ctx, req) if err != nil { handler.HandleResponse(ctx, err, nil) diff --git a/internal/controller/question_controller.go b/internal/controller/question_controller.go index 940f8c4e..e91c4b20 100644 --- a/internal/controller/question_controller.go +++ b/internal/controller/question_controller.go @@ -42,12 +42,11 @@ func (qc *QuestionController) RemoveQuestion(ctx *gin.Context) { return } req.UserID = middleware.GetLoginUserIDFromContext(ctx) + req.IsAdmin = middleware.GetIsAdminFromContext(ctx) if can, err := qc.rankService.CheckRankPermission(ctx, req.UserID, rank.QuestionDeleteRank); err != nil || !can { handler.HandleResponse(ctx, errors.Forbidden(reason.RankFailToMeetTheCondition), errors.Forbidden(reason.RankFailToMeetTheCondition)) return } - userinfo := middleware.GetUserInfoFromContext(ctx) - req.IsAdmin = userinfo.IsAdmin err := qc.questionService.RemoveQuestion(ctx, req) handler.HandleResponse(ctx, err, nil) @@ -69,8 +68,7 @@ func (qc *QuestionController) CloseQuestion(ctx *gin.Context) { return } req.UserID = middleware.GetLoginUserIDFromContext(ctx) - userinfo := middleware.GetUserInfoFromContext(ctx) - req.IsAdmin = userinfo.IsAdmin + req.IsAdmin = middleware.GetIsAdminFromContext(ctx) err := qc.questionService.CloseQuestion(ctx, req) handler.HandleResponse(ctx, err, nil) } @@ -85,17 +83,16 @@ func (qc *QuestionController) CloseQuestion(ctx *gin.Context) { // @Param id query string true "Question TagID" default(1) // @Success 200 {string} string "" // @Router /answer/api/v1/question/info [get] -func (qc *QuestionController) GetQuestion(c *gin.Context) { - id := c.Query("id") - ctx := context.Background() - userID := middleware.GetLoginUserIDFromContext(c) - userinfo := middleware.GetUserInfoFromContext(c) - info, err := qc.questionService.GetQuestion(ctx, id, userID, true, userinfo.IsAdmin) +func (qc *QuestionController) GetQuestion(ctx *gin.Context) { + id := ctx.Query("id") + userID := middleware.GetLoginUserIDFromContext(ctx) + isAdmin := middleware.GetIsAdminFromContext(ctx) + info, err := qc.questionService.GetQuestion(ctx, id, userID, true, isAdmin) if err != nil { - handler.HandleResponse(c, err, nil) + handler.HandleResponse(ctx, err, nil) return } - handler.HandleResponse(c, nil, info) + handler.HandleResponse(ctx, nil, info) } // SimilarQuestion godoc @@ -218,8 +215,7 @@ func (qc *QuestionController) UpdateQuestion(ctx *gin.Context) { return } req.UserID = middleware.GetLoginUserIDFromContext(ctx) - userinfo := middleware.GetUserInfoFromContext(ctx) - req.IsAdmin = userinfo.IsAdmin + req.IsAdmin = middleware.GetIsAdminFromContext(ctx) if can, err := qc.rankService.CheckRankPermission(ctx, req.UserID, rank.QuestionEditRank); err != nil || !can { handler.HandleResponse(ctx, err, errors.Forbidden(reason.RankFailToMeetTheCondition)) return @@ -244,8 +240,7 @@ func (qc *QuestionController) CheckCanUpdateQuestion(ctx *gin.Context) { req := &schema.CheckCanQuestionUpdate{} req.ID = id req.UserID = middleware.GetLoginUserIDFromContext(ctx) - userinfo := middleware.GetUserInfoFromContext(ctx) - req.IsAdmin = userinfo.IsAdmin + req.IsAdmin = middleware.GetIsAdminFromContext(ctx) if can, err := qc.rankService.CheckRankPermission(ctx, req.UserID, rank.QuestionEditRank); err != nil || !can { handler.HandleResponse(ctx, err, errors.Forbidden(reason.RankFailToMeetTheCondition)) return diff --git a/internal/controller/tag_controller.go b/internal/controller/tag_controller.go index 673a746c..f1877db3 100644 --- a/internal/controller/tag_controller.go +++ b/internal/controller/tag_controller.go @@ -42,8 +42,7 @@ func (tc *TagController) SearchTagLike(ctx *gin.Context) { if handler.BindAndCheck(ctx, req) { return } - userinfo := middleware.GetUserInfoFromContext(ctx) - req.IsAdmin = userinfo.IsAdmin + req.IsAdmin = middleware.GetIsAdminFromContext(ctx) resp, err := tc.tagCommonService.SearchTagLike(ctx, req) handler.HandleResponse(ctx, err, resp) }