feat(security):增加用于确定用户登录情况的中间件。

This commit is contained in:
徐涛
2022-08-12 10:01:30 +08:00
parent cb481d9c28
commit f57f2fd971
2 changed files with 31 additions and 3 deletions

View File

@@ -1,46 +0,0 @@
package router
import (
"electricity_bill_calc/cache"
"electricity_bill_calc/model"
"net/http"
"strings"
"github.com/gin-gonic/gin"
)
// 用于解析Authorization头并从缓存中获取用户会话信息注入上下文的中间件。
// 如果没有获取到用户会话信息,将直接跳过会话信息注入。
// ! 仅通过该中间件是不能保证上下文中一定保存有用户会话信息的。
func SessionRecovery(c *gin.Context) {
auth := c.Request.Header.Get("Authorization")
if len(auth) > 0 {
token := strings.Fields(auth)[1]
session, err := cache.RetreiveSession(token)
if err == nil {
c.Set("session", session)
}
}
c.Next()
}
// 用于对用户会话进行是否企业用户的判断
// ! 通过该中间件以后,是可以保证上下文中一定具有用户会话信息的。
func EnterpriseAuthorize(c *gin.Context) {
session, exists := c.Get("session")
if !exists || session.(*model.Session).Type != 0 {
c.AbortWithStatus(http.StatusForbidden)
}
c.Next()
}
// 用于对用户会话进行是否监管用户或运维用户的判断
// ! 通过该中间件以后,是可以保证上下文中一定具有用户会话信息的。
func ManagementAuthorize(c *gin.Context) {
session, exists := c.Get("session")
if !exists || (session.(*model.Session).Type != 1 && session.(*model.Session).Type != 2) {
c.AbortWithStatus(http.StatusForbidden)
}
c.Next()
}