gobeego

How to add filters in beego


I have started developing web application where the back end is Go. I'm using beego framework to develop this application.Previously i used to program in java. Java has a filter function to filter the request by url. I came to know that we can implement it in beego after reading the documentation. There they have given the following example code

var FilterUser = func(ctx *context.Context) {
    if strings.HasPrefix(ctx.Input.URL(), "/login") {
        return
    }

    _, ok := ctx.Input.Session("uid").(int)
    if !ok {
        ctx.Redirect(302, "/login")
    }
}

beego.InsertFilter("/*", beego.BeforeRouter, FilterUser) 

The problem is I don't know where to use this block of code.


Solution

  • You can do something like the following:

    In more detail:

    // A URL set in router.go
    beego.InsertFilter("/admin/", beego.BeforeRouter, controllers.ProtectAdminPages)
    
    // A Filter that runs before the controller
    // Filter to protect admin pages
    var ProtectAdminPages = func(ctx *context.Context) {
        sess, _ := beego.GlobalSessions.SessionStart(ctx.ResponseWriter, ctx.Request)
        defer sess.SessionRelease(ctx.ResponseWriter)
        // read the session from the request
        ses := sess.Get("mysession")
        if ses != nil {
            s := ses.(map[string]string)
            // get the key identifying the user id
            userId, _ := strconv.Atoi(s["id"])
            // a utility function that searches the database
            // gets the user and checks for admin privileges
            if !utils.UserIsAdmin(userId) {
                ctx.Redirect(301, "/some-other-page")
            }
        } else {
            ctx.Redirect(301, "/")
        }
    }