我的简化路由类似于
r.Route("/api/v1", func(r chi.Router) {
r.Route("/case", func(r chi.Router) {
// generic case - for everyone
r.Get("/{uuid}", caseGetByUuid)
r.Put("/", casePut)
// all cases only available to admins
// r.Use(ensureAdminUser) // ← this is the place I have an error
r.Get("/", caseGetAll)
}
// admin endpoint
r.Route("/admin", func(r chi.Router) {
// ensure that the user is an admin
r.Use(ensureAdminUser)
r.Route("/user", func(r chi.Router) {
r.Route("/token", func(r chi.Router) { // /admin/user/token
r.Get("/", userTokenGetAll)
r.Put("/", userTokenCreate)
r.Delete("/", userTokenDelete)
})
})
})
})
第二条路线 ( /admin) 受中间件限制,如果不满足特定约束,该中间件将打破链条。中间件位于所有路由之前。
我想在第一条路线 ( /case) 中进行类似的过滤,但只针对一条路线(三条路线中的一条)。取消注释r.Use(ensureAdminUser)导致
panic: chi: all middlewares must be defined before routes on a mux
我不能有两条路线/case。
有没有办法保留路由/case并限制 root 调用的方法之一?
如果不是,我将为受限情况创建一条替代路线。
炎炎设计
相关分类