开源组件:
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() }