重写规则API支持用户操作

This commit is contained in:
GoEdgeLab
2023-07-04 18:31:12 +08:00
parent 0df40b8d98
commit 1c695ebf93
4 changed files with 78 additions and 4 deletions

View File

@@ -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)

View File

@@ -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 {

View File

@@ -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 {

View File

@@ -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
}