nezha/pkg/mygin/auth.go

64 lines
1.2 KiB
Go
Raw Normal View History

2019-12-08 03:59:58 -05:00
package mygin
import (
"net/http"
2019-12-20 10:58:09 -05:00
"strings"
2019-12-08 03:59:58 -05:00
"time"
"github.com/gin-gonic/gin"
"github.com/p14yground/nezha/model"
"github.com/p14yground/nezha/service/dao"
)
// AuthorizeOption ..
type AuthorizeOption struct {
Guest bool
Member bool
IsPage bool
Msg string
Redirect string
Btn string
}
// Authorize ..
func Authorize(opt AuthorizeOption) func(*gin.Context) {
return func(c *gin.Context) {
token, err := c.Cookie(dao.Conf.Site.CookieName)
2019-12-20 10:58:09 -05:00
token = strings.TrimSpace(token)
2019-12-08 03:59:58 -05:00
var code uint64 = http.StatusForbidden
if opt.Guest {
code = http.StatusBadRequest
}
commonErr := ErrInfo{
Title: "访问受限",
Code: code,
Msg: opt.Msg,
Link: opt.Redirect,
Btn: opt.Btn,
2019-12-20 10:58:09 -05:00
}
if token != "" {
2019-12-08 03:59:58 -05:00
}
var isLogin bool
2019-12-20 10:58:09 -05:00
var u model.User
err = dao.DB.Where("token = ?", token).First(&u).Error
2019-12-08 03:59:58 -05:00
if err == nil {
2019-12-20 10:58:09 -05:00
isLogin = u.TokenExpired.After(time.Now())
}
if isLogin {
c.Set(model.CtxKeyAuthorizedUser, &u)
2019-12-08 03:59:58 -05:00
}
// 已登录且只能游客访问
if isLogin && opt.Guest {
ShowErrorPage(c, commonErr, opt.IsPage)
return
}
// 未登录且需要登录
if !isLogin && opt.Member {
ShowErrorPage(c, commonErr, opt.IsPage)
return
}
}
}