Есть ли способ промежуточного маршрутизатора с групповым маршрутизатором? - PullRequest
0 голосов
/ 10 сентября 2018

Я новичок в Beego Framework, я провел несколько исследований и разработок внутри него. Но мне нужно несколько подсказок, связанных с маршрутизаторами.

Я создал несколько маршрутов с промежуточным программным обеспечением и групповым маршрутизатором, но мне нужно несколько предложений от эксперта.

Позвольте мне поделиться примером, который я сделал.

Router.go

func init() {
    ns := beego.NewNamespace("/api/v1",

        beego.NSNamespace("/front",
            beego.NSBefore(AuthFilter),
            beego.NSRouter("/user",&controllers.ObjectController{},"*:GetValueByAdmin"),
            beego.NSRouter("/test",&controllers.ObjectController{},"*:GetValueByAdmin"),
            beego.NSRouter("/test",&controllers.ObjectController{},"*:GetValueByAdmin"),
            beego.NSRouter("/test",&controllers.ObjectController{},"*:GetValueByAdmin"),
            beego.NSRouter("/product",&controllers.ObjectController{},"*:GetValueByAdmin"),
        ),


        beego.NSNamespace("/a1",
            beego.NSRouter("/test1",&controllers.ObjectController{},"*:GetValueByAdmin1"),
            beego.NSRouter("/test2",&controllers.ObjectController{},"*:GetValueByAdmin1"),
            beego.NSInclude(
                &controllers.UserController{},
            ),
        ),
    )

    beego.AddNamespace(ns)
}

var AuthFilter = func(ctx *context.Context) {
    // The Authorization header should come in this format: Bearer <jwt>
    // The first thing we do is check that the JWT exists
    header := strings.Split(ctx.Input.Header("Authorization"), " ")
    if header[0] != "Bearer" {
        ctx.Abort(401, "Not authorized")
    }
}

Я создал маршрутизатор, используя Пространство имен, и он работает нормально, используя этот URL (http://localhost:8080/api/v1/front/test). Но я хочу удалить ключевое слово "front" из URL.

Я пробовал ниже варианты, такие как:

  1. Я скопировал код в пространство имен «Front», чтобы поместить его наружу, но My «NSBefore» будет применять весь метод, определенный после этого. Мне нужно 2 группы. До авторизации и после аутентификации. После аутентификации я хочу добавить beego.NSBefore(AuthFilter).

  2. Я пытался использовать политику, но она не будет работать так, как мне нужно.

    beego.Policy("/api/v1/front/*","*", AuthFilter) beego.Policy("/api/v1/admin/*","*", AuthFilter)

Если я удалю front из политики, тогда будут применены все URL.

Есть ли у нас возможность создать групповой маршрутизатор без URL-пути, и он охватит мою концепцию?

...