From 1c695ebf9317bbc87c12fea23e8ed5fef91d895f Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Tue, 4 Jul 2023 18:31:12 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E5=86=99=E8=A7=84=E5=88=99API?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E7=94=A8=E6=88=B7=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/db/models/http_rewrite_rule_dao.go | 31 ++++++++++++++- internal/db/models/user_model.go | 38 +++++++++++++++++++ .../rpc/services/service_http_rewrite_rule.go | 12 ++++-- internal/rpc/services/users/service_user.go | 1 + 4 files changed, 78 insertions(+), 4 deletions(-) diff --git a/internal/db/models/http_rewrite_rule_dao.go b/internal/db/models/http_rewrite_rule_dao.go index 50689788..487b6f72 100644 --- a/internal/db/models/http_rewrite_rule_dao.go +++ b/internal/db/models/http_rewrite_rule_dao.go @@ -124,8 +124,9 @@ func (this *HTTPRewriteRuleDAO) ComposeRewriteRule(tx *dbs.Tx, rewriteRuleId int } // CreateRewriteRule 创建规则 -func (this *HTTPRewriteRuleDAO) CreateRewriteRule(tx *dbs.Tx, pattern string, replace string, mode string, redirectStatus int, isBreak bool, proxyHost string, withQuery bool, isOn bool, condsJSON []byte) (int64, error) { +func (this *HTTPRewriteRuleDAO) CreateRewriteRule(tx *dbs.Tx, userId int64, pattern string, replace string, mode string, redirectStatus int, isBreak bool, proxyHost string, withQuery bool, isOn bool, condsJSON []byte) (int64, error) { var op = NewHTTPRewriteRuleOperator() + op.UserId = userId op.State = HTTPRewriteRuleStateEnabled op.IsOn = isOn @@ -172,6 +173,34 @@ func (this *HTTPRewriteRuleDAO) UpdateRewriteRule(tx *dbs.Tx, rewriteRuleId int6 return this.NotifyUpdate(tx, rewriteRuleId) } +func (this *HTTPRewriteRuleDAO) CheckUserRewriteRule(tx *dbs.Tx, userId int64, rewriteRuleId int64) error { + if rewriteRuleId <= 0 { + return ErrNotFound + } + + exists, err := this.Query(tx). + Pk(rewriteRuleId). + Attr("userId", userId). + Exist() + if err != nil { + return err + } + + if !exists { + return ErrNotFound + } + + webId, err := SharedHTTPWebDAO.FindEnabledWebIdWithRewriteRuleId(tx, rewriteRuleId) + if err != nil { + return err + } + if webId <= 0 { + return ErrNotFound + } + + return SharedHTTPWebDAO.CheckUserWeb(tx, userId, webId) +} + // NotifyUpdate 通知更新 func (this *HTTPRewriteRuleDAO) NotifyUpdate(tx *dbs.Tx, rewriteRuleId int64) error { webId, err := SharedHTTPWebDAO.FindEnabledWebIdWithRewriteRuleId(tx, rewriteRuleId) diff --git a/internal/db/models/user_model.go b/internal/db/models/user_model.go index 5c272b97..8f8b1920 100644 --- a/internal/db/models/user_model.go +++ b/internal/db/models/user_model.go @@ -2,6 +2,42 @@ package models import "github.com/iwind/TeaGo/dbs" +const ( + UserField_Id dbs.FieldName = "id" // ID + UserField_IsOn dbs.FieldName = "isOn" // 是否启用 + UserField_Username dbs.FieldName = "username" // 用户名 + UserField_Password dbs.FieldName = "password" // 密码 + UserField_Fullname dbs.FieldName = "fullname" // 真实姓名 + UserField_Mobile dbs.FieldName = "mobile" // 手机号 + UserField_VerifiedMobile dbs.FieldName = "verifiedMobile" // 已验证手机号 + UserField_Tel dbs.FieldName = "tel" // 联系电话 + UserField_Remark dbs.FieldName = "remark" // 备注 + UserField_Email dbs.FieldName = "email" // 邮箱地址 + UserField_VerifiedEmail dbs.FieldName = "verifiedEmail" // 激活后的邮箱 + UserField_EmailIsVerified dbs.FieldName = "emailIsVerified" // 邮箱是否已验证 + UserField_AvatarFileId dbs.FieldName = "avatarFileId" // 头像文件ID + UserField_CreatedAt dbs.FieldName = "createdAt" // 创建时间 + UserField_Day dbs.FieldName = "day" // YYYYMMDD + UserField_UpdatedAt dbs.FieldName = "updatedAt" // 修改时间 + UserField_State dbs.FieldName = "state" // 状态 + UserField_Source dbs.FieldName = "source" // 来源 + UserField_ClusterId dbs.FieldName = "clusterId" // 集群ID + UserField_Features dbs.FieldName = "features" // 允许操作的特征 + UserField_RegisteredIP dbs.FieldName = "registeredIP" // 注册使用的IP + UserField_IsRejected dbs.FieldName = "isRejected" // 是否已拒绝 + UserField_RejectReason dbs.FieldName = "rejectReason" // 拒绝理由 + UserField_IsVerified dbs.FieldName = "isVerified" // 是否验证通过 + UserField_RequirePlans dbs.FieldName = "requirePlans" // 是否需要购买套餐 + UserField_Modules dbs.FieldName = "modules" // 用户模块 + UserField_PriceType dbs.FieldName = "priceType" // 计费类型:traffic|bandwidth + UserField_PricePeriod dbs.FieldName = "pricePeriod" // 结算周期 + UserField_ServersEnabled dbs.FieldName = "serversEnabled" // 是否禁用所有服务 + UserField_Notification dbs.FieldName = "notification" // 通知设置 + UserField_BandwidthAlgo dbs.FieldName = "bandwidthAlgo" // 带宽算法 + UserField_BandwidthModifier dbs.FieldName = "bandwidthModifier" // 带宽修正值 + UserField_Lang dbs.FieldName = "lang" // 语言代号 +) + // User 用户 type User struct { Id uint32 `field:"id"` // ID @@ -36,6 +72,7 @@ type User struct { Notification dbs.JSON `field:"notification"` // 通知设置 BandwidthAlgo string `field:"bandwidthAlgo"` // 带宽算法 BandwidthModifier float64 `field:"bandwidthModifier"` // 带宽修正值 + Lang string `field:"lang"` // 语言代号 } type UserOperator struct { @@ -71,6 +108,7 @@ type UserOperator struct { Notification any // 通知设置 BandwidthAlgo any // 带宽算法 BandwidthModifier any // 带宽修正值 + Lang any // 语言代号 } func NewUserOperator() *UserOperator { diff --git a/internal/rpc/services/service_http_rewrite_rule.go b/internal/rpc/services/service_http_rewrite_rule.go index 8ab66025..4af5cb70 100644 --- a/internal/rpc/services/service_http_rewrite_rule.go +++ b/internal/rpc/services/service_http_rewrite_rule.go @@ -15,14 +15,14 @@ type HTTPRewriteRuleService struct { // CreateHTTPRewriteRule 创建重写规则 func (this *HTTPRewriteRuleService) CreateHTTPRewriteRule(ctx context.Context, req *pb.CreateHTTPRewriteRuleRequest) (*pb.CreateHTTPRewriteRuleResponse, error) { // 校验请求 - _, err := this.ValidateAdmin(ctx) + _, userId, err := this.ValidateAdminAndUser(ctx, true) if err != nil { return nil, err } var tx = this.NullTx() - rewriteRuleId, err := models.SharedHTTPRewriteRuleDAO.CreateRewriteRule(tx, req.Pattern, req.Replace, req.Mode, types.Int(req.RedirectStatus), req.IsBreak, req.ProxyHost, req.WithQuery, req.IsOn, req.CondsJSON) + rewriteRuleId, err := models.SharedHTTPRewriteRuleDAO.CreateRewriteRule(tx, userId, req.Pattern, req.Replace, req.Mode, types.Int(req.RedirectStatus), req.IsBreak, req.ProxyHost, req.WithQuery, req.IsOn, req.CondsJSON) if err != nil { return nil, err } @@ -33,12 +33,18 @@ func (this *HTTPRewriteRuleService) CreateHTTPRewriteRule(ctx context.Context, r // UpdateHTTPRewriteRule 修改重写规则 func (this *HTTPRewriteRuleService) UpdateHTTPRewriteRule(ctx context.Context, req *pb.UpdateHTTPRewriteRuleRequest) (*pb.RPCSuccess, error) { // 校验请求 - _, err := this.ValidateAdmin(ctx) + _, userId, err := this.ValidateAdminAndUser(ctx, true) if err != nil { return nil, err } var tx = this.NullTx() + if userId > 0 { + err = models.SharedHTTPRewriteRuleDAO.CheckUserRewriteRule(tx, userId, req.RewriteRuleId) + if err != nil { + return nil, err + } + } err = models.SharedHTTPRewriteRuleDAO.UpdateRewriteRule(tx, req.RewriteRuleId, req.Pattern, req.Replace, req.Mode, types.Int(req.RedirectStatus), req.IsBreak, req.ProxyHost, req.WithQuery, req.IsOn, req.CondsJSON) if err != nil { diff --git a/internal/rpc/services/users/service_user.go b/internal/rpc/services/users/service_user.go index ff205362..3ce239ee 100644 --- a/internal/rpc/services/users/service_user.go +++ b/internal/rpc/services/users/service_user.go @@ -261,6 +261,7 @@ func (this *UserService) FindEnabledUser(ctx context.Context, req *pb.FindEnable IsEnterpriseIdentified: isEnterpriseIdentified, BandwidthAlgo: user.BandwidthAlgo, OtpLogin: pbOtpAuth, + Lang: user.Lang, }}, nil }