Go实战全家桶之六十:gin路由与权限的改造

开源组件:

goweb: https://gitee.com/leijmdas/goweb/settings#index

权限中间件:Go实战全家桶之十四:Goweb权限控制中间件实现_go web权限框架-CSDN博客

原路由:

func (r *InitRouter) NewInitRouter(app *gin.Engine) *gin.Engine {
    g := app.Group("/hub-admin/")
    g.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
    // 检验商户标识
    //g.Use(middleware.CheckShopId())
    //用户身份授权
    g.Use(middleware.CheckSessionToken(
       middleware.AllowMethodAndPathPrefixSkipper(),
    ))
    g.Use(middleware.CheckAllowed())
    middleware.CheckAllowedRegister(app.Routes())

    v2 := g.Group("/v2")
    {

       //奖品列表查询
       activity := v2.Group("/activity")
       {
          //TODO 查询单个活动
          activity.GET("/ActivityGetById/:id", r.activity.ActivityGetById)
          // TODO 新增活动
          activity.POST("/ActivityAdd", r.activity.ActivityAdd)
          // TODO 查询单个活动
          activity.POST("/ActivityList", r.activity.ActivityList)
       }
       //备注
       notes := v2.Group("/notes")
       {
          // TODO 新增备注
          notes.POST("/NotesCreate", r.notes.NotesCreate)
          // TODO 查询备注
          notes.POST("/NotesQuery", r.notes.NotesQuery)
       }
       //奖品列表查询
       prize := v2.Group("/prize")
       {
          //TODO 奖品列表查询
          prize.POST("/HubComboPrizeQueryPagination", r.prize.HubComboPrizeQueryPagination)

       }
       //签约套餐
       shopContractCombo := v2.Group("/shopContractCombo")
       {
          //TODO 签约套餐列表查询
          shopContractCombo.POST("/HubShopContractComboQueryPagination", r.shopContractCombo.HubShopContractComboQueryPagination)

          shopContractCombo.POST("/HubShopContractDetailComboQueryPagination", r.shopContractCombo.HubShopContractDetailComboQueryPagination)
       }
       //签约配额
       contractQuota := v2.Group("/contractQuota")
       {
          //TODO  配额扣减
          contractQuota.POST("/HubShopContractQuotaDeduction", r.contractQuota.HubShopContractQuotaDeduction)
          //TODO  配额查询
          contractQuota.POST("/HubShopContractQuotaQueryPagination", r.contractQuota.HubShopContractQuotaQueryPagination)
          //TODO  我的配额
          contractQuota.POST("/MyHubShopContractQuotaQueryPagination", r.contractQuota.MyHubShopContractQuotaQueryPagination)
       }
       //商户信息
       shop := v2.Group("/shop")
       {
          shop.POST("/ContactShopGetIdNameList", r.shop.ContactShopGetIdNameList)

       }
       //合约
       contract := v2.Group("/contract")
       {
          //TODO 根据签约ID查询套餐
          contract.POST("/HubContractComboListByCShopContractId", r.contract.HubContractComboListByCShopContractId)
          //TODO 根据ID查询合约模板
          contract.POST("/HubContractComboListByContractIdAndShopContractId", r.contract.HubContractComboListByContractIdAndShopContractId)
          //TODO 保存或修改合约
          contract.POST("/HubContractCreateOrUpdate", r.contract.HubContractCreateOrUpdate)
          //TODO 合约模板分页查询
          contract.POST("/HubContractQueryPagination", r.contract.HubContractQueryPagination)
          //TODO 套餐详情合约模板分页查询
          contract.POST("/ComboDetailContractQueryPagination", r.contract.ComboDetailContractQueryPagination)
          //TODO 根据合约模板ID和新旧套餐查询
          contract.POST("/HubContractGetByIdAndComboType", r.contract.HubContractGetByIdAndComboType)
          //TODO 根据ID查询合约模板
          contract.GET("/HubContractGetById", r.contract.HubContractGetById)
          //TODO 根据IDS批量删除合约模板
          contract.POST("/HubContractDeleteByIds", r.contract.HubContractDeleteByIds)
          //TODO 根据IDS批量发布合约模板
          contract.POST("/HubContractPublishByIds", r.contract.HubContractPublishByIds)
          //TODO 合约模板保存并发布
          contract.POST("/HubContractSaveAndPublish", r.contract.HubContractSaveAndPublish)
          //TODO 根据IDS批量上架处理
          contract.POST("/HubContractPutShelfByIds", r.contract.HubContractPutShelfByIds)
          //TODO 根据IDS批量下架处理
          contract.POST("/HubContractOffShelfByIds", r.contract.HubContractOffShelfByIds)
          //TODO 根据合约模板ID查询套餐信息
          contract.POST("/HubContractComboListByContractId", r.contract.HubContractComboListByContractId)
          //TODO 根据商户类型找到合约模板
          contract.POST("/HubContractListByContractTypeId", r.contract.HubContractListByContractTypeId)
          //TODO 根据协议url查询作者信息
          contract.POST("/getAuthorInfoByUrl", r.contract.HubContractGetAuthorInfoByUrl)
          //TODO 根据协议url查询作者信息
          contract.POST("/getDefaultContractIdByContractTypeId", r.contract.HubContractFindDefaultContractIdByContractType)
       }
       //套餐
       combo := v2.Group("/combo")
       {
          //TODO 保存或修改套餐
          combo.POST("/HubComboCreateOrUpdate", r.combo.HubComboCreateOrUpdate)
          //TODO 根据ID批量删除
          combo.POST("/HubComboDeleteByIds", r.combo.HubComboDeleteByIds)
          //TODO 分页查询
          combo.POST("/HubComboQueryPagination", r.combo.HubComboQueryPagination)
          //TODO 分页查询
          combo.POST("/DetailComboQueryPagination", r.combo.DetailComboQueryPagination)
          //TODO 分页查询
          combo.POST("/RewardsDetailComboQueryPagination", r.combo.RewardsDetailComboQueryPagination)
          //TODO 分页查询
          combo.POST("/ContractDetailComboQueryPagination", r.combo.ContractDetailComboQueryPagination)
          //TODO 分页查询
          combo.POST("/SignRewardsDetailComboQueryPagination", r.combo.SignRewardsDetailComboQueryPagination)
          //TODO 根据ID编辑
          combo.GET("/HubComboGetById", r.combo.HubComboGetById)
          //TODO 批量发布
          combo.POST("/HubComboPublishByIds", r.combo.HubComboPublishByIds)
          //TODO 保存并发布
          combo.POST("/HubComboSaveAndPublish", r.combo.HubComboSaveAndPublish)
          //TODO 上架
          combo.POST("/HubComboPutShelfByIds", r.combo.HubComboPutShelfByIds)
          //TODO 下架
          combo.POST("/HubComboOffShelfByIds", r.combo.HubComboOffShelfByIds)
          //TODO 根据域找到套餐信息
          combo.GET("/HubComboListByDomainId", r.combo.HubComboListByDomainId)
          //TODO 根据套餐ID找到配额详情
          combo.POST("/HubQuotaSkuListByComboIdPagination", r.combo.HubQuotaSkuListByComboIdPagination)
          //TODO 套餐发布确认
          combo.GET("/HubComboConfirmPublishById", r.combo.HubComboConfirmPublishById)
          //TODO 套餐下架确认
          combo.GET("/HubComboConfirmOffShelfById", r.combo.HubComboConfirmOffShelfById)
          //TODO 查询套餐详睛
       }
       contractType := v2.Group("/contractType")
       {
          //TODO 查询所有商户类型
          contractType.GET("/HubContractTypeListAll", r.contractType.HubContractTypeListAll)
       }
       //字典配置
       dict := v2.Group("/dict")
       {
          dict.POST("/list", r.dict.HubDictionaryList)
       }

       //配额项
       quota := v2.Group("/quota")
       {
          quota.POST("/save", r.quota.HubQuotaSaveDraft)
          quota.POST("/prepublish", r.quota.HubQuotaPrePublish)
          quota.GET("/detail", r.quota.HubQuotaFindById)
          quota.POST("/deleteByIds", r.quota.HubQuotaDeleteByIds)
          quota.POST("/list", r.quota.HubQuotaQueryPagination)
          quota.POST("/QuotaQueryPaginationByDomain", r.quota.QuotaQueryPaginationByDomain)
          quota.POST("/publish", r.quota.HubQuotaPublish)
          quota.GET("/price", r.quota.HubQuotaLatestPrice)
          quota.POST("/HubQuotaSaveAndPublish", r.quota.HubQuotaSaveAndPublish)
       }
       //配额库存
       quotaSku := v2.Group("/quotaSku")
       {
          quotaSku.POST("/list/contract", r.quotaSku.List)
          quotaSku.POST("/list/shopContract", r.quotaSku.List)
       }

       //指标
       metrics := v2.Group("/metrics")
       {
          metrics.POST("/save", r.metrics.SaveDraft)
          //发布按钮
          metrics.POST("/prepublish", r.metrics.HubMetricsPrepublish)
          //下架按钮
          metrics.POST("/off", r.metrics.HubMetricsPreOff)
          //模拟下架
          metrics.POST("/preoff", r.metrics.HubMetricsOff)
          //上架按钮
          metrics.POST("/on", r.metrics.HubMetricsOn)

          metrics.GET("/detail", r.metrics.HubMetricsFindById)
          metrics.POST("/deleteByIds", r.metrics.DeleteByIds)
          metrics.POST("/list", r.metrics.List)
          metrics.POST("/TaskCreateQueryMetricsList", r.metrics.TaskCreateQueryMetricsList)
          metrics.POST("/HubMetricsSaveAndPublish", r.metrics.HubMetricsSaveAndPublish)
          metrics.POST("/listByDomain", r.metrics.HubMetricsQueryByDomainId)
       }

原接口权限:

// P = resource_domain  brand = resource_code management = resource_key, read = action_key
var permissions = map[string][]string{
    "(*HubComboController).HubComboDeleteByIds-fm":                                   {"H", "manage", "combo", "delete"},     // 套餐-删除
    "(*HubComboController).HubComboPublishByIds-fm":                                  {"H", "manage", "combo", "publish"},    // 套餐-发布
    "(*HubComboController).HubComboPutShelfByIds-fm":                                 {"H", "manage", "combo", "put_on"},     // 套餐-上架
    "(*HubComboController).HubComboOffShelfByIds-fm":                                 {"H", "manage", "combo", "put_off"},    // 套餐-上架
    "(*HubComboController).HubComboQueryPagination-fm":                               {"H", "manage", "combo", "read"},       // 套餐-查询
    "(*HubComboController).HubComboListByDomainId-fm":                                {"H", "manage", "combo", "read"},       // 套餐-查询
    "(*HubShopContractComboController).HubShopContractDetailComboQueryPagination-fm": {"H", "manage", "combo", "read"},       // 套餐-查询
    "(*HubContractController).HubContractPublishByIds-fm":                            {"H", "manage", "template", "publish"}, //合约模板-发布
    "(*HubContractController).HubContractPutShelfByIds-fm":                           {"H", "manage", "template", "put_on"},  //合约模板-上架
    "(*HubContractController).HubContractOffShelfByIds-fm":                           {"H", "manage", "template", "put_off"}, //合约模板-下架
    "(*HubContractController).HubContractQueryPagination-fm":                         {"H", "manage", "template", "read"},    //合约模板-查询
    "(*HubContractController).HubContractListByContractTypeId-fm":                    {"H", "manage", "template", "read"},    //合约模板-查询
    "(*HubShopContractQuotaController).MyHubShopContractQuotaQueryPagination-fm":     {"H", "hubs", "quota", "read"},         //我的配额-查看
    "(*HubRewardsController).HubShopContractRewardsQueryPagination-fm":               {"H", "hubs", "incentive", "read"},     //我的配额-查看

    "(*HubQuotaController).HubQuotaSaveDraft-fm":       {"H", "resource", "quota", "insert"},  // 配额项-创建
    "(*HubQuotaController).HubQuotaPrePublish-fm":      {"H", "resource", "quota", "publish"}, // 配额项-发布
    "(*HubQuotaController).HubQuotaDeleteByIds-fm":     {"H", "resource", "quota", "delete"},  // 配额项-删除
    "(*HubQuotaController).HubQuotaQueryPagination-fm": {"H", "resource", "quota", "read"},    //配额项-列表
    "(*HubQuotaSkuController).List-fm":                 {"H", "resource", "quota", "delete"},  // 配额列表

    "(*HubTaskController).List-fm":    {"H", "encourage", "task", "read"},    //任务项-列表
    "(*HubTaskController).Save-fm":    {"H", "encourage", "task", "insert"},  //任务项-创建
    "(*HubTaskController).delete-fm":  {"H", "encourage", "task", "delete"},  //任务项-删除
    "(*HubTaskController).publish-fm": {"H", "encourage", "task", "publish"}, //任务项-发布
    "(*HubTaskController).on-fm":      {"H", "encourage", "task", "put_on"},  //任务项-上架
    "(*HubTaskController).off-fm":     {"H", "encourage", "task", "put_off"}, //任务项-下架

    "(*HubMetricsController).SaveDraft-fm":            {"H", "encourage", "metrics", "insert"},  //指标项-创建
    "(*HubMetricsController).DeleteByIds-fm":          {"H", "encourage", "metrics", "delete"},  //指标项-删除
    "(*HubMetricsController).HubMetricsPrepublish-fm": {"H", "encourage", "metrics", "publish"}, //指标项-发布
    "(*HubMetricsController).HubMetricsOn-fm":         {"H", "encourage", "metrics", "put_on"},  //指标项-上架
    "(*HubMetricsController).HubMetricsPreOff-fm":     {"H", "encourage", "metrics", "put_off"}, //指标项-下架
    "(*HubMetricsController).List-fm":                 {"H", "encourage", "metrics", "read"},    //指标项-列表

    "(*HubShopContractController).HubShopContractQueryPagination-fm": {"H", "hubs", "sign", "read"},  //签约-列表
    "(*HubShopContractController).HubShopContractSaveDraft-fm":       {"H", "hubs", "sign", "begin"}, //签约-保存
    "(*HubShopContractController).HubShopContractSubmit-fm":          {"H", "hubs", "sign", "begin"}, //签约-提交
    "(*HubShopContractController).Stop-fm":                           {"H", "hubs", "sign", "stop"},  //签约-商户入驻签约

    "(*HubShopContractTaskController).List-fm": {"H", "hubs", "task", "read"}, //签约任务-列表

    "(*HubLevelController).HubLevelQueryPagination-fm":   {"H", "encourage", "level", "read"},    //等级-列表
    "(*HubLevelController).HubLevelSaveOrUpdateDraft-fm": {"H", "encourage", "level", "insert"},  //等级-保存
    "(*HubLevelController).HubLevelDel-fm":               {"H", "encourage", "level", "delete"},  //等级-删除
    "(*HubLevelController).HubLevelPublishByIds-fm":      {"H", "encourage", "level", "publish"}, //等级-发布

    "(*HubIncentiveController).HubIncentiveQueryPagination-fm":   {"H", "encourage", "incentive", "read"},    //激励-列表
    "(*HubTaskIncentiveController).FindByTaskId-fm":              {"H", "encourage", "incentive", "read"},    //激励-查询任务关联的激励列表
    "(*HubIncentiveController).HubIncentiveSaveOrUpdateDraft-fm": {"H", "encourage", "incentive", "insert"},  //激励-保存
    "(*HubIncentiveController).HubIncentiveDel-fm":               {"H", "encourage", "incentive", "delete"},  //激励-删除
    "(*HubIncentiveController).HubIncentivePublishByIds-fm":      {"H", "encourage", "incentive", "publish"}, //激励-发布
    "(*HubIncentiveController).HubIncentiveOnByIds-fm":           {"H", "encourage", "incentive", "put_on"},  //激励-上架
    "(*HubIncentiveController).HubIncentiveOffByIds-fm":          {"H", "encourage", "incentive", "put_off"}, //激励-下架

}

现在的路由与权限:
type DomainFuncService struct {
    funchandler.FuncService
    service.ServiceDomain
}

func NewDomainFuncService() *DomainFuncService {
    return new(DomainFuncService).init()
}

// ResourceType,ResourceDomain,ResourceCode,ResourceKey,ActionKey
func (this *DomainFuncService) init() *DomainFuncService {
    this.InitRouter(this, "/website-admin/v3/domain")
        //接口权限控制
    this.RegisterRouterRes(http.MethodGet, "/detail/:id", this.DomainDetail, "B", "S", "manage", "domain", "list")
    this.RegisterRouterRes(http.MethodPost, "/save", this.DomainSave, "B", "S", "manage", "domain", "insert")
    this.RegisterRouterRes(http.MethodPost, "/query", this.DomainQuery, "B", "S", "manage", "domain", "list")
    this.RegisterRouterRes(http.MethodPost, "/active", this.DomainActive, "B", "S", "manage", "domain", "open")
        //无权限控制
    this.RegisterRouter(http.MethodGet, "/init", this.Init)
    return this
}注册
func Register() {

    NewDbqueryFuncService().Register()
}
package router

import (
    "git.ichub.com/general/webcli120/goweb/webserver"
    "git.ichub.com/general/webcli120/goweb/webserver/funchandler"
    "website/server/service/config"
    "website/server/service/domain"
    "website/server/service/file"
    "website/server/service/gocenter"
    "website/server/service/menu"
    "website/server/service/website"
)

const swaggapis = `
       @Summary,接口简介
       @Description,接口描述
       @Tags,接口的标签,用来给 API 分组的
       @Accept,接口接收入参的类型,支持mpfd(表单),json 等
       @Produce,接口返回的出参类型,支持mpfd(表单),json 等
       @Param,入参参数定义,从前往后分别是:
       如代码中 @Param user_id query string true "用户ID" minlength(1) maxlength(100) 所示,@Param 格式为:
       
       1.参数名称 2.参数类型 3.数据类型 4.是否为必填字段 5.参数描述 6.其它属性
       
       关于接口的路径和响应注释有:
       
       @Success,指定成功响应的数据,格式为 1.HTTP响应码 2.响应参数类型 3.响应数据类型 4.其它描述
       @Failure,失败响应后的数据,和 Success 一样
       @Router,指定路由和 HTTP 方法
`

func Register() *webserver.WebHandlers {

    file.Register()
    config.Register()
    gocenter.Register()
    website.Register()
    domain.Register()
    menu.Register()

    return funchandler.Build()
}

你可能感兴趣的:(go实战全家桶,go,golang,gin,windows)