I have started developing web application where the back end is golang.I m using beego framework to develop this application.Previously i used to program in java.Java have an 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....Can someone help me in this.I appreciate your help.Thanks
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, "/")
}
}