gin web框架中根据权限显示不同页面内容

18-05-31 12:31 2081  

背景 基于golang web框架gin开发的个人博客系统(wblog) 需求 需要更加是否是管理员(或者是否登录),增加隐藏博文的访问链接,便于自己查看隐藏文章,以及防止未登录用户查看,需要: 在导航栏根据是否管理员,增加显示一个导航 “隐藏博文” 点击“隐藏博文”,显示所有设置为“不公开”的博文列表,列表的顺序和显示方式和公开博文一样(使用相同模板index.html) 管理员退出登录后,隐藏掉导航”隐藏博文“ 导航栏增加一个快捷的”登录“按钮 实现 模板修改navigator.html 中增加一传入参数 admin, 用来控制是否多显示一个导航: <ul class="nav navbar-nav"> <li> <a href="/index">博文</a> </li> {{if .admin}} <li> <a href="/hidden">隐藏博文</a> </li> {{end}} <li> <a href="/page/6">关于</a> </li> <li> <a href="/rss" target="_blank">RSS</a> </li> <li> <a href="/subscribe">订阅</a> </li> </ul> 增加一个登录导航按钮: <ul class="nav navbar-nav"> {{if .user}} <li> <a href="/logout">退出登录</a> </li> {{else}} <li> <a href="/signin">登录</a> </li> <li> <a href="/auth/github">Github登录</a> </li> {{end}} </ul> 在common.go 增加一个函数,用来判断是否管理员登录: func IsAdmin(c *gin.Context) bool { s := sessions.Default(c) v := s.Get(SESSION_KEY) if v == nil { return false } uid := v.(uint) user, err := models.GetUser(uid) if err != nil || user == nil { return false } if user.IsAdmin { return true } return false } 在所有需要用到导航模板navigator.html的主模板使用场合,添加admin参数传递,如index.go中: admin := IsAdmin(c) user, _ := c.Get(CONTEXT_USER_KEY) c.HTML(http.StatusOK, "index/index.html", gin.H{ "posts": posts, "tags": models.MustListTag(), "archives": models.MustListPostArchives(), "links": models.MustListLinks(), "user": user, "admin": admin, }) 最后为了能够把主模板中的参数传递到子模板中,需要将柱模板的导入代码稍作修改,比如: {{template "navigation.html"}} 改成: {{template "navigation.html" .}}

1 2018-10-12 19:24

1