整体优化完善接口与数据权限检查

This commit is contained in:
2026-03-28 14:18:11 +08:00
parent 51c377964d
commit 22cb2d50d3
21 changed files with 161 additions and 98 deletions

View File

@@ -1,6 +1,8 @@
## TODO ## TODO
增删改数据权限排查 用户请求需要检查数据权限
管理页面查询统一加排序
后端默认用户名不能是完整手机号 后端默认用户名不能是完整手机号

View File

@@ -433,6 +433,7 @@ create table permission (
parent_id int, parent_id int,
name text not null, name text not null,
description text, description text,
sort int,
created_at timestamptz default current_timestamp, created_at timestamptz default current_timestamp,
updated_at timestamptz default current_timestamp, updated_at timestamptz default current_timestamp,
deleted_at timestamptz deleted_at timestamptz
@@ -447,6 +448,7 @@ comment on column permission.id is '权限ID';
comment on column permission.parent_id is '父权限ID'; comment on column permission.parent_id is '父权限ID';
comment on column permission.name is '权限名称'; comment on column permission.name is '权限名称';
comment on column permission.description is '权限描述'; comment on column permission.description is '权限描述';
comment on column permission.sort is '排序';
comment on column permission.created_at is '创建时间'; comment on column permission.created_at is '创建时间';
comment on column permission.updated_at is '更新时间'; comment on column permission.updated_at is '更新时间';
comment on column permission.deleted_at is '删除时间'; comment on column permission.deleted_at is '删除时间';

View File

@@ -2,6 +2,7 @@ package auth
import ( import (
m "platform/web/models" m "platform/web/models"
"strings"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
) )
@@ -12,7 +13,6 @@ type AuthCtx struct {
Client *m.Client `json:"client,omitempty"` Client *m.Client `json:"client,omitempty"`
Scopes []string `json:"scopes,omitempty"` Scopes []string `json:"scopes,omitempty"`
Session *m.Session `json:"session,omitempty"` Session *m.Session `json:"session,omitempty"`
smap map[string]struct{}
} }
func (a *AuthCtx) PermitUser(scopes ...string) (*AuthCtx, error) { func (a *AuthCtx) PermitUser(scopes ...string) (*AuthCtx, error) {
@@ -68,17 +68,13 @@ func (a *AuthCtx) checkScopes(scopes ...string) bool {
if len(scopes) == 0 || len(a.Scopes) == 0 { if len(scopes) == 0 || len(a.Scopes) == 0 {
return true return true
} }
if len(a.smap) == 0 && len(a.Scopes) > 0 {
a.smap = make(map[string]struct{}, len(a.Scopes))
for _, scope := range a.Scopes {
a.smap[scope] = struct{}{}
}
}
for _, scope := range scopes { for _, scope := range scopes {
if _, ok := a.smap[scope]; ok { for _, prefix := range a.Scopes {
if strings.HasPrefix(scope, prefix) {
return true return true
} }
} }
}
return false return false
} }

View File

@@ -15,7 +15,7 @@ type Model struct {
ID int32 `json:"id" gorm:"column:id;primaryKey"` ID int32 `json:"id" gorm:"column:id;primaryKey"`
CreatedAt time.Time `json:"created_at" gorm:"column:created_at"` CreatedAt time.Time `json:"created_at" gorm:"column:created_at"`
UpdatedAt time.Time `json:"updated_at" gorm:"column:updated_at"` UpdatedAt time.Time `json:"updated_at" gorm:"column:updated_at"`
DeletedAt gorm.DeletedAt `gorm:"column:deleted_at"` DeletedAt gorm.DeletedAt `json:"-" gorm:"column:deleted_at"`
} }
func (m *Model) GetID() int32 { func (m *Model) GetID() int32 {

View File

@@ -1,30 +1,55 @@
package core package core
const ( const (
ScopePermissionRead = string("permission:read") ScopePermission = string("permission") // 权限
ScopePermissionWrite = string("permission:write") ScopePermissionRead = string("permission:read") // 读取权限列表
ScopePermissionWrite = string("permission:write") // 写入权限
ScopeAdminRoleRead = string("admin_role:read") ScopeAdminRole = string("admin_role") // 管理员角色
ScopeAdminRoleWrite = string("admin_role:write") ScopeAdminRoleRead = string("admin_role:read") // 读取管理员角色列表
ScopeAdminRoleWrite = string("admin_role:write") // 写入管理员角色
ScopeAdminRead = string("admin:read") ScopeAdmin = string("admin") // 管理员
ScopeAdminWrite = string("admin:write") ScopeAdminRead = string("admin:read") // 读取管理员列表
ScopeAdminWrite = string("admin:write") // 写入管理员
ScopeProductRead = string("product:read") ScopeProduct = string("product") // 产品
ScopeProductWrite = string("product:write") ScopeProductRead = string("product:read") // 读取产品列表
ScopeProductWrite = string("product:write") // 写入产品
ScopeProductSkuRead = string("product_sku:read") ScopeProductSku = string("product_sku") // 产品套餐
ScopeProductSkuWrite = string("product_sku:write") ScopeProductSkuRead = string("product_sku:read") // 读取产品套餐列表
ScopeProductSkuWrite = string("product_sku:write") // 写入产品套餐
ScopeProductDiscountRead = string("product_discount:read") ScopeDiscount = string("discount") // 折扣
ScopeProductDiscountWrite = string("product_discount:write") ScopeDiscountRead = string("discount:read") // 读取折扣列表
ScopeDiscountWrite = string("discount:write") // 写入折扣
ScopeResourceRead = string("resource:read") ScopeResource = string("resource") // 用户套餐
ScopeResourceWrite = string("resource:write") ScopeResourceRead = string("resource:read") // 读取用户套餐列表
ScopeResourceWrite = string("resource:write") // 写入用户套餐
ScopeUserRead = string("user:read") ScopeUser = string("user") // 用户
ScopeUserWrite = string("user:write") ScopeUserRead = string("user:read") // 读取用户列表
ScopeUserWrite = string("user:write") // 写入用户
ScopeCouponRead = string("coupon:read") ScopeCoupon = string("coupon") // 优惠券
ScopeCouponWrite = string("coupon:write") ScopeCouponRead = string("coupon:read") // 读取优惠券列表
ScopeCouponWrite = string("coupon:write") // 写入优惠券
ScopeBatch = string("batch") // 批次
ScopeBatchRead = string("batch:read") // 读取批次列表
ScopeBatchWrite = string("batch:write") // 写入批次
ScopeChannel = string("channel") // IP
ScopeChannelRead = string("channel:read") // 读取 IP 列表
ScopeChannelWrite = string("channel:write") // 写入 IP
ScopeTrade = string("trade") // 交易
ScopeTradeRead = string("trade:read") // 读取交易列表
ScopeTradeWrite = string("trade:write") // 写入交易
ScopeBill = string("bill") // 账单
ScopeBillRead = string("bill:read") // 读取账单列表
ScopeBillWrite = string("bill:write") // 写入账单
) )

View File

@@ -9,7 +9,7 @@ import (
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
) )
func PageAdminsByAdmin(c *fiber.Ctx) error { func PageAdminByAdmin(c *fiber.Ctx) error {
_, err := auth.GetAuthCtx(c).PermitAdmin(core.ScopeAdminRead) _, err := auth.GetAuthCtx(c).PermitAdmin(core.ScopeAdminRead)
if err != nil { if err != nil {
return err return err
@@ -37,7 +37,7 @@ type PageAdminsReq struct {
core.PageReq core.PageReq
} }
func ListAdminsByAdmin(c *fiber.Ctx) error { func AllAdminByAdmin(c *fiber.Ctx) error {
_, err := auth.GetAuthCtx(c).PermitAdmin(core.ScopeAdminRead) _, err := auth.GetAuthCtx(c).PermitAdmin(core.ScopeAdminRead)
if err != nil { if err != nil {
return err return err

View File

@@ -9,7 +9,7 @@ import (
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
) )
func ListAdminRolesByAdmin(c *fiber.Ctx) error { func AllAdminRoleByAdmin(c *fiber.Ctx) error {
_, err := auth.GetAuthCtx(c).PermitAdmin(core.ScopeAdminRoleRead) _, err := auth.GetAuthCtx(c).PermitAdmin(core.ScopeAdminRoleRead)
if err != nil { if err != nil {
return err return err
@@ -23,7 +23,7 @@ func ListAdminRolesByAdmin(c *fiber.Ctx) error {
return c.JSON(list) return c.JSON(list)
} }
func PageAdminRolesByAdmin(c *fiber.Ctx) error { func PageAdminRoleByAdmin(c *fiber.Ctx) error {
_, err := auth.GetAuthCtx(c).PermitAdmin(core.ScopeAdminRoleRead) _, err := auth.GetAuthCtx(c).PermitAdmin(core.ScopeAdminRoleRead)
if err != nil { if err != nil {
return err return err

View File

@@ -12,8 +12,8 @@ import (
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
) )
// PageResourceBatch 分页查询套餐提取记录 // PageBatch 分页查询套餐提取记录
func PageResourceBatch(ctx *fiber.Ctx) error { func PageBatch(ctx *fiber.Ctx) error {
// 检查权限 // 检查权限
authCtx, err := auth.GetAuthCtx(ctx).PermitUser() authCtx, err := auth.GetAuthCtx(ctx).PermitUser()
if err != nil { if err != nil {
@@ -59,7 +59,7 @@ type PageResourceBatchReq struct {
// PageBatchByAdmin 分页查询所有提取记录 // PageBatchByAdmin 分页查询所有提取记录
func PageBatchByAdmin(c *fiber.Ctx) error { func PageBatchByAdmin(c *fiber.Ctx) error {
_, err := auth.GetAuthCtx(c).PermitAdmin() _, err := auth.GetAuthCtx(c).PermitAdmin(core.ScopeBatchRead)
if err != nil { if err != nil {
return err return err
} }

View File

@@ -14,7 +14,7 @@ import (
// PageBillByAdmin 分页查询全部账单 // PageBillByAdmin 分页查询全部账单
func PageBillByAdmin(c *fiber.Ctx) error { func PageBillByAdmin(c *fiber.Ctx) error {
// 检查权限 // 检查权限
_, err := auth.GetAuthCtx(c).PermitAdmin() _, err := auth.GetAuthCtx(c).PermitAdmin(core.ScopeBillRead)
if err != nil { if err != nil {
return err return err
} }

View File

@@ -15,10 +15,10 @@ import (
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
) )
// PageChannelsByAdmin 分页查询所有通道 // PageChannelByAdmin 分页查询所有通道
func PageChannelsByAdmin(c *fiber.Ctx) error { func PageChannelByAdmin(c *fiber.Ctx) error {
// 检查权限 // 检查权限
_, err := auth.GetAuthCtx(c).PermitAdmin() _, err := auth.GetAuthCtx(c).PermitAdmin(core.ScopeChannelRead)
if err != nil { if err != nil {
return err return err
} }
@@ -98,8 +98,8 @@ type PageChannelsByAdminReq struct {
ExpiredAtEnd *time.Time `json:"expired_at_end"` ExpiredAtEnd *time.Time `json:"expired_at_end"`
} }
// 分页查询当前用户通道 // ListChannel 分页查询当前用户通道
func ListChannels(c *fiber.Ctx) error { func ListChannel(c *fiber.Ctx) error {
// 检查权限 // 检查权限
authContext, err := auth.GetAuthCtx(c).PermitUser() authContext, err := auth.GetAuthCtx(c).PermitUser()
if err != nil { if err != nil {
@@ -169,9 +169,15 @@ type ListChannelsReq struct {
ExpireBefore *time.Time `json:"expire_before"` ExpireBefore *time.Time `json:"expire_before"`
} }
// 创建新通道 // CreateChannel 创建新通道
func CreateChannel(c *fiber.Ctx) error { func CreateChannel(c *fiber.Ctx) error {
// 检查权限
_, err := auth.GetAuthCtx(c).PermitUser()
if err != nil {
return err
}
// 解析参数 // 解析参数
req := new(CreateChannelReq) req := new(CreateChannelReq)
if err := g.Validator.ParseBody(c, req); err != nil { if err := g.Validator.ParseBody(c, req); err != nil {

View File

@@ -33,7 +33,7 @@ func PageCouponByAdmin(c *fiber.Ctx) error {
}) })
} }
func AllCouponsByAdmin(c *fiber.Ctx) error { func AllCouponByAdmin(c *fiber.Ctx) error {
_, err := auth.GetAuthCtx(c).PermitAdmin(core.ScopeCouponRead) _, err := auth.GetAuthCtx(c).PermitAdmin(core.ScopeCouponRead)
if err != nil { if err != nil {
return err return err

View File

@@ -9,7 +9,7 @@ import (
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
) )
func ListPermissionsByAdmin(c *fiber.Ctx) error { func AllPermissionByAdmin(c *fiber.Ctx) error {
_, err := auth.GetAuthCtx(c).PermitAdmin(core.ScopePermissionRead) _, err := auth.GetAuthCtx(c).PermitAdmin(core.ScopePermissionRead)
if err != nil { if err != nil {
return err return err

View File

@@ -9,7 +9,7 @@ import (
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
) )
func AllProductsByAdmin(c *fiber.Ctx) error { func AllProductByAdmin(c *fiber.Ctx) error {
// 检查权限 // 检查权限
_, err := auth.GetAuthCtx(c).PermitAdmin(core.ScopeProductRead) _, err := auth.GetAuthCtx(c).PermitAdmin(core.ScopeProductRead)
if err != nil { if err != nil {

View File

@@ -9,8 +9,8 @@ import (
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
) )
func PageProductDiscountByAdmin(c *fiber.Ctx) error { func PageDiscountByAdmin(c *fiber.Ctx) error {
_, err := auth.GetAuthCtx(c).PermitAdmin(core.ScopeProductDiscountRead) _, err := auth.GetAuthCtx(c).PermitAdmin(core.ScopeDiscountRead)
if err != nil { if err != nil {
return err return err
} }
@@ -33,8 +33,8 @@ func PageProductDiscountByAdmin(c *fiber.Ctx) error {
}) })
} }
func AllProductDiscountsByAdmin(c *fiber.Ctx) error { func AllDiscountByAdmin(c *fiber.Ctx) error {
_, err := auth.GetAuthCtx(c).PermitAdmin(core.ScopeProductDiscountRead) _, err := auth.GetAuthCtx(c).PermitAdmin(core.ScopeDiscountRead)
if err != nil { if err != nil {
return err return err
} }
@@ -47,8 +47,8 @@ func AllProductDiscountsByAdmin(c *fiber.Ctx) error {
return c.JSON(list) return c.JSON(list)
} }
func CreateProductDiscount(c *fiber.Ctx) error { func CreateDiscount(c *fiber.Ctx) error {
_, err := auth.GetAuthCtx(c).PermitAdmin(core.ScopeProductDiscountWrite) _, err := auth.GetAuthCtx(c).PermitAdmin(core.ScopeDiscountWrite)
if err != nil { if err != nil {
return err return err
} }
@@ -66,8 +66,8 @@ func CreateProductDiscount(c *fiber.Ctx) error {
return nil return nil
} }
func UpdateProductDiscount(c *fiber.Ctx) error { func UpdateDiscount(c *fiber.Ctx) error {
_, err := auth.GetAuthCtx(c).PermitAdmin(core.ScopeProductDiscountWrite) _, err := auth.GetAuthCtx(c).PermitAdmin(core.ScopeDiscountWrite)
if err != nil { if err != nil {
return err return err
} }
@@ -85,8 +85,8 @@ func UpdateProductDiscount(c *fiber.Ctx) error {
return nil return nil
} }
func DeleteProductDiscount(c *fiber.Ctx) error { func DeleteDiscount(c *fiber.Ctx) error {
_, err := auth.GetAuthCtx(c).PermitAdmin(core.ScopeProductDiscountWrite) _, err := auth.GetAuthCtx(c).PermitAdmin(core.ScopeDiscountWrite)
if err != nil { if err != nil {
return err return err
} }

View File

@@ -209,7 +209,7 @@ type PageResourceLongReq struct {
// PageResourceShortByAdmin 分页查询全部短效套餐 // PageResourceShortByAdmin 分页查询全部短效套餐
func PageResourceShortByAdmin(c *fiber.Ctx) error { func PageResourceShortByAdmin(c *fiber.Ctx) error {
_, err := auth.GetAuthCtx(c).PermitAdmin() _, err := auth.GetAuthCtx(c).PermitAdmin(core.ScopeResourceRead)
if err != nil { if err != nil {
return err return err
} }
@@ -303,7 +303,7 @@ type PageResourceShortByAdminReq struct {
// PageResourceLongByAdmin 分页查询全部长效套餐 // PageResourceLongByAdmin 分页查询全部长效套餐
func PageResourceLongByAdmin(c *fiber.Ctx) error { func PageResourceLongByAdmin(c *fiber.Ctx) error {
_, err := auth.GetAuthCtx(c).PermitAdmin() _, err := auth.GetAuthCtx(c).PermitAdmin(core.ScopeResourceRead)
if err != nil { if err != nil {
return err return err
} }

View File

@@ -21,7 +21,7 @@ import (
// PageTradeByAdmin 分页查询所有订单 // PageTradeByAdmin 分页查询所有订单
func PageTradeByAdmin(c *fiber.Ctx) error { func PageTradeByAdmin(c *fiber.Ctx) error {
// 检查权限 // 检查权限
_, err := auth.GetAuthCtx(c).PermitAdmin() _, err := auth.GetAuthCtx(c).PermitAdmin(core.ScopeTradeRead)
if err != nil { if err != nil {
return err return err
} }
@@ -193,6 +193,12 @@ type TradeCancelReq struct {
// 检查订单 // 检查订单
func TradeCheck(c *fiber.Ctx) error { func TradeCheck(c *fiber.Ctx) error {
// 检查权限
_, err := auth.GetAuthCtx(c).PermitUser()
if err != nil {
return err
}
// 解析请求参数 // 解析请求参数
req := new(TradeCheckReq) req := new(TradeCheckReq)
if err := g.Validator.ParseQuery(c, req); err != nil { if err := g.Validator.ParseQuery(c, req); err != nil {

View File

@@ -121,7 +121,7 @@ func PageUserByAdmin(c *fiber.Ctx) error {
// 查询用户列表 // 查询用户列表
users, total, err := q.User.Debug(). users, total, err := q.User.Debug().
Preload(q.User.Admin). Preload(q.User.Admin, q.User.Discount).
Omit(q.User.Password). Omit(q.User.Password).
Where(do). Where(do).
Order(q.User.CreatedAt). Order(q.User.CreatedAt).
@@ -159,7 +159,7 @@ type PageUserByAdminReq struct {
// 绑定管理员 // 绑定管理员
func BindAdmin(c *fiber.Ctx) error { func BindAdmin(c *fiber.Ctx) error {
// 检查权限 // 检查权限
authCtx, err := auth.GetAuthCtx(c).PermitAdmin() authCtx, err := auth.GetAuthCtx(c).PermitAdmin(core.ScopeUserWrite)
if err != nil { if err != nil {
return err return err
} }

View File

@@ -8,6 +8,7 @@ type Permission struct {
ParentID *int32 `json:"parent_id,omitempty" gorm:"column:parent_id"` // 父权限ID ParentID *int32 `json:"parent_id,omitempty" gorm:"column:parent_id"` // 父权限ID
Name string `json:"name" gorm:"column:name"` // 权限名称 Name string `json:"name" gorm:"column:name"` // 权限名称
Description *string `json:"description,omitempty" gorm:"column:description"` // 权限描述 Description *string `json:"description,omitempty" gorm:"column:description"` // 权限描述
Sort int `json:"sort" gorm:"column:sort"` // 排序
Parent *Permission `json:"parent,omitempty" gorm:"foreignKey:ParentID"` Parent *Permission `json:"parent,omitempty" gorm:"foreignKey:ParentID"`
Children []*Permission `json:"children,omitempty" gorm:"foreignKey:ParentID"` Children []*Permission `json:"children,omitempty" gorm:"foreignKey:ParentID"`

View File

@@ -34,6 +34,7 @@ func newPermission(db *gorm.DB, opts ...gen.DOOption) permission {
_permission.ParentID = field.NewInt32(tableName, "parent_id") _permission.ParentID = field.NewInt32(tableName, "parent_id")
_permission.Name = field.NewString(tableName, "name") _permission.Name = field.NewString(tableName, "name")
_permission.Description = field.NewString(tableName, "description") _permission.Description = field.NewString(tableName, "description")
_permission.Sort = field.NewInt(tableName, "sort")
_permission.Children = permissionHasManyChildren{ _permission.Children = permissionHasManyChildren{
db: db.Session(&gorm.Session{}), db: db.Session(&gorm.Session{}),
@@ -72,6 +73,7 @@ type permission struct {
ParentID field.Int32 ParentID field.Int32
Name field.String Name field.String
Description field.String Description field.String
Sort field.Int
Children permissionHasManyChildren Children permissionHasManyChildren
Parent permissionBelongsToParent Parent permissionBelongsToParent
@@ -98,6 +100,7 @@ func (p *permission) updateTableName(table string) *permission {
p.ParentID = field.NewInt32(table, "parent_id") p.ParentID = field.NewInt32(table, "parent_id")
p.Name = field.NewString(table, "name") p.Name = field.NewString(table, "name")
p.Description = field.NewString(table, "description") p.Description = field.NewString(table, "description")
p.Sort = field.NewInt(table, "sort")
p.fillFieldMap() p.fillFieldMap()
@@ -114,7 +117,7 @@ func (p *permission) GetFieldByName(fieldName string) (field.OrderExpr, bool) {
} }
func (p *permission) fillFieldMap() { func (p *permission) fillFieldMap() {
p.fieldMap = make(map[string]field.Expr, 9) p.fieldMap = make(map[string]field.Expr, 10)
p.fieldMap["id"] = p.ID p.fieldMap["id"] = p.ID
p.fieldMap["created_at"] = p.CreatedAt p.fieldMap["created_at"] = p.CreatedAt
p.fieldMap["updated_at"] = p.UpdatedAt p.fieldMap["updated_at"] = p.UpdatedAt
@@ -122,6 +125,7 @@ func (p *permission) fillFieldMap() {
p.fieldMap["parent_id"] = p.ParentID p.fieldMap["parent_id"] = p.ParentID
p.fieldMap["name"] = p.Name p.fieldMap["name"] = p.Name
p.fieldMap["description"] = p.Description p.fieldMap["description"] = p.Description
p.fieldMap["sort"] = p.Sort
} }

View File

@@ -15,6 +15,7 @@ func ApplyRouters(app *fiber.App) {
api := app.Group("/api") api := app.Group("/api")
userRouter(api) userRouter(api)
adminRouter(api) adminRouter(api)
clientRouter(api)
// 回调 // 回调
callbacks := app.Group("/callback") callbacks := app.Group("/callback")
@@ -45,7 +46,6 @@ func userRouter(api fiber.Router) {
auth.Post("/token", auth2.Token) auth.Post("/token", auth2.Token)
auth.Post("/revoke", auth2.Revoke) auth.Post("/revoke", auth2.Revoke)
auth.Post("/introspect", auth2.Introspect) auth.Post("/introspect", auth2.Introspect)
auth.Post("/verify/sms", handlers.SmsCode)
// 用户 // 用户
user := api.Group("/user") user := api.Group("/user")
@@ -67,19 +67,18 @@ func userRouter(api fiber.Router) {
resource.Post("/list/short", handlers.PageResourceShort) resource.Post("/list/short", handlers.PageResourceShort)
resource.Post("/list/long", handlers.PageResourceLong) resource.Post("/list/long", handlers.PageResourceLong)
resource.Post("/create", handlers.CreateResource) resource.Post("/create", handlers.CreateResource)
resource.Post("/price", handlers.ResourcePrice)
resource.Post("/statistics/free", handlers.StatisticResourceFree) resource.Post("/statistics/free", handlers.StatisticResourceFree)
resource.Post("/statistics/usage", handlers.StatisticResourceUsage) resource.Post("/statistics/usage", handlers.StatisticResourceUsage)
// 批次 // 批次
batch := api.Group("/batch") batch := api.Group("/batch")
batch.Post("/page", handlers.PageResourceBatch) batch.Post("/page", handlers.PageBatch)
// 通道 // 通道
channel := api.Group("/channel") channel := api.Group("/channel")
channel.Post("/list", handlers.ListChannels) channel.Post("/list", handlers.ListChannel)
channel.Post("/create", handlers.CreateChannel) channel.Post("/create", handlers.CreateChannel)
channel.Post("/remove", handlers.RemoveChannels)
// 交易 // 交易
trade := api.Group("/trade") trade := api.Group("/trade")
@@ -101,7 +100,6 @@ func userRouter(api fiber.Router) {
proxy.Post("/online", handlers.ProxyReportOnline) proxy.Post("/online", handlers.ProxyReportOnline)
proxy.Post("/offline", handlers.ProxyReportOffline) proxy.Post("/offline", handlers.ProxyReportOffline)
proxy.Post("/update", handlers.ProxyReportUpdate) proxy.Post("/update", handlers.ProxyReportUpdate)
proxy.Post("/register/baidyin", handlers.ProxyRegisterBaiYin)
// 节点 // 节点
edge := api.Group("/edge") edge := api.Group("/edge")
@@ -113,39 +111,60 @@ func userRouter(api fiber.Router) {
inquiry.Post("/create", handlers.CreateInquiry) inquiry.Post("/create", handlers.CreateInquiry)
} }
// 客户端接口路由
func clientRouter(api fiber.Router) {
client := api
// 验证短信令牌
client.Post("/sms/verify", handlers.SmsCode)
// 套餐定价查询
resource := client.Group("/resource")
resource.Post("/price", handlers.ResourcePrice)
// 通道管理
channel := client.Group("/channel")
channel.Post("/remove", handlers.RemoveChannels)
// 代理网关注册
proxy := client.Group("/proxy")
proxy.Post("/register/baidyin", handlers.ProxyRegisterBaiYin)
}
// 管理员接口路由 // 管理员接口路由
func adminRouter(api fiber.Router) { func adminRouter(api fiber.Router) {
api = api.Group("/admin") api = api.Group("/admin")
// permission 权限 // admin 管理员
var permission = api.Group("/permission")
permission.Post("/list", handlers.ListPermissionsByAdmin)
permission.Post("/page", handlers.PagePermissionByAdmin)
// admin-role 管理员角色
var adminRole = api.Group("/admin-role")
adminRole.Post("/list", handlers.ListAdminRolesByAdmin)
adminRole.Post("/page", handlers.PageAdminRolesByAdmin)
adminRole.Post("/create", handlers.CreateAdminRole)
adminRole.Post("/update", handlers.UpdateAdminRole)
adminRole.Post("/remove", handlers.RemoveAdminRole)
// admin 管理员账户
var admin = api.Group("/admin") var admin = api.Group("/admin")
admin.Post("/page", handlers.PageAdminsByAdmin) admin.Post("/all", handlers.AllAdminByAdmin)
admin.Post("/all", handlers.ListAdminsByAdmin) admin.Post("/page", handlers.PageAdminByAdmin)
admin.Post("/create", handlers.CreateAdmin) admin.Post("/create", handlers.CreateAdmin)
admin.Post("/update", handlers.UpdateAdmin) admin.Post("/update", handlers.UpdateAdmin)
admin.Post("/remove", handlers.RemoveAdmin) admin.Post("/remove", handlers.RemoveAdmin)
// admin-role 管理员角色
var adminRole = api.Group("/admin-role")
adminRole.Post("/list", handlers.AllAdminRoleByAdmin)
adminRole.Post("/page", handlers.PageAdminRoleByAdmin)
adminRole.Post("/create", handlers.CreateAdminRole)
adminRole.Post("/update", handlers.UpdateAdminRole)
adminRole.Post("/remove", handlers.RemoveAdminRole)
// permission 权限
var permission = api.Group("/permission")
permission.Post("/list", handlers.AllPermissionByAdmin)
permission.Post("/page", handlers.PagePermissionByAdmin)
// user 用户 // user 用户
var user = api.Group("/user") var user = api.Group("/user")
user.Post("/page", handlers.PageUserByAdmin) user.Post("/page", handlers.PageUserByAdmin)
user.Post("/bind", handlers.BindAdmin)
user.Post("/create", handlers.CreateUserByAdmin) user.Post("/create", handlers.CreateUserByAdmin)
user.Post("/update", handlers.UpdateUserByAdmin) user.Post("/update", handlers.UpdateUserByAdmin)
user.Post("/remove", handlers.RemoveUserByAdmin) user.Post("/remove", handlers.RemoveUserByAdmin)
user.Post("/bind", handlers.BindAdmin)
// resource 套餐 // resource 套餐
var resource = api.Group("/resource") var resource = api.Group("/resource")
resource.Post("/short/page", handlers.PageResourceShortByAdmin) resource.Post("/short/page", handlers.PageResourceShortByAdmin)
@@ -153,15 +172,15 @@ func adminRouter(api fiber.Router) {
resource.Post("/update", handlers.UpdateResourceByAdmin) resource.Post("/update", handlers.UpdateResourceByAdmin)
// batch 批次 // batch 批次
var usage = api.Group("batch") var batch = api.Group("/batch")
usage.Post("/page", handlers.PageBatchByAdmin) batch.Post("/page", handlers.PageBatchByAdmin)
// channel 通道 // channel 通道
var channel = api.Group("/channel") var channel = api.Group("/channel")
channel.Post("/page", handlers.PageChannelsByAdmin) channel.Post("/page", handlers.PageChannelByAdmin)
// trade 交易 // trade 交易
var trade = api.Group("trade") var trade = api.Group("/trade")
trade.Post("/page", handlers.PageTradeByAdmin) trade.Post("/page", handlers.PageTradeByAdmin)
// bill 账单 // bill 账单
@@ -170,29 +189,31 @@ func adminRouter(api fiber.Router) {
// product 产品 // product 产品
var product = api.Group("/product") var product = api.Group("/product")
product.Post("/all", handlers.AllProductsByAdmin) product.Post("/all", handlers.AllProductByAdmin)
product.Post("/create", handlers.CreateProduct) product.Post("/create", handlers.CreateProduct)
product.Post("/update", handlers.UpdateProduct) product.Post("/update", handlers.UpdateProduct)
product.Post("/remove", handlers.DeleteProduct) product.Post("/remove", handlers.DeleteProduct)
product.Post("/sku/all", handlers.AllProductSkuByAdmin) product.Post("/sku/all", handlers.AllProductSkuByAdmin)
product.Post("/sku/page", handlers.PageProductSkuByAdmin) product.Post("/sku/page", handlers.PageProductSkuByAdmin)
product.Post("/sku/create", handlers.CreateProductSku) product.Post("/sku/create", handlers.CreateProductSku)
product.Post("/sku/update", handlers.UpdateProductSku) product.Post("/sku/update", handlers.UpdateProductSku)
product.Post("/sku/update/discount/batch", handlers.BatchUpdateProductSkuDiscount)
product.Post("/sku/remove", handlers.DeleteProductSku) product.Post("/sku/remove", handlers.DeleteProductSku)
product.Post("/sku/update/discount/batch", handlers.BatchUpdateProductSkuDiscount)
// discount 折扣 // discount 折扣
var discount = api.Group("/discount") var discount = api.Group("/discount")
discount.Post("/page", handlers.PageProductDiscountByAdmin) discount.Post("/all", handlers.AllDiscountByAdmin)
discount.Post("/all", handlers.AllProductDiscountsByAdmin) discount.Post("/page", handlers.PageDiscountByAdmin)
discount.Post("/create", handlers.CreateProductDiscount) discount.Post("/create", handlers.CreateDiscount)
discount.Post("/update", handlers.UpdateProductDiscount) discount.Post("/update", handlers.UpdateDiscount)
discount.Post("/remove", handlers.DeleteProductDiscount) discount.Post("/remove", handlers.DeleteDiscount)
// coupon 优惠券 // coupon 优惠券
var coupon = api.Group("/coupon") var coupon = api.Group("/coupon")
coupon.Post("/all", handlers.AllCouponByAdmin)
coupon.Post("/page", handlers.PageCouponByAdmin) coupon.Post("/page", handlers.PageCouponByAdmin)
coupon.Post("/all", handlers.AllCouponsByAdmin)
coupon.Post("/create", handlers.CreateCoupon) coupon.Post("/create", handlers.CreateCoupon)
coupon.Post("/update", handlers.UpdateCoupon) coupon.Post("/update", handlers.UpdateCoupon)
coupon.Post("/remove", handlers.DeleteCoupon) coupon.Post("/remove", handlers.DeleteCoupon)

View File

@@ -11,7 +11,7 @@ var Permission = &permissionService{}
type permissionService struct{} type permissionService struct{}
func (r *permissionService) ListPermissions() (result []*m.Permission, err error) { func (r *permissionService) ListPermissions() (result []*m.Permission, err error) {
return q.Permission.Find() return q.Permission.Order(q.Permission.Sort).Find()
} }
func (p *permissionService) PagePermissions(req core.PageReq) (result []*m.Permission, count int64, err error) { func (p *permissionService) PagePermissions(req core.PageReq) (result []*m.Permission, count int64, err error) {