Commit 025a2fc14ca58f3d827e5f14644b354debc6109b
1 parent
b03775ca
Exists in
v1.2
and in
1 other branch
.
Showing
6 changed files
with
121 additions
and
13 deletions
Show diff stats
API/DealyMessage.go
| ... | ... | @@ -8,6 +8,7 @@ import ( |
| 8 | 8 | "go.mongodb.org/mongo-driver/bson/primitive" |
| 9 | 9 | "letu/Config" |
| 10 | 10 | "letu/DB" |
| 11 | + "letu/Lib/Auth" | |
| 11 | 12 | "letu/Lib/DelayMessage" |
| 12 | 13 | ) |
| 13 | 14 | |
| ... | ... | @@ -26,7 +27,9 @@ func DealyMessageInfo(c *gin.Context) { |
| 26 | 27 | |
| 27 | 28 | _user, _ := c.Get("UserInfo") |
| 28 | 29 | user := _user.(*DB.SMember) |
| 29 | - if c.Query("UserId") != user.Id.Hex() { | |
| 30 | + | |
| 31 | + err := Auth.CheckUserAuth(c.Query("UserId"), user) | |
| 32 | + if err != nil { | |
| 30 | 33 | c.JSON(200, tools.ResponseError{ |
| 31 | 34 | 401, |
| 32 | 35 | "没有权限", |
| ... | ... | @@ -73,8 +76,10 @@ func CreateDealyMessage(c *gin.Context) { |
| 73 | 76 | |
| 74 | 77 | |
| 75 | 78 | _user, _ := c.Get("UserInfo") |
| 76 | - userToken := _user.(*DB.SMember) | |
| 77 | - if c.PostForm("UserId") != userToken.Id.Hex(){ | |
| 79 | + user := _user.(*DB.SMember) | |
| 80 | + | |
| 81 | + err := Auth.CheckUserAuth(c.PostForm("UserId"), user) | |
| 82 | + if err != nil { | |
| 78 | 83 | c.JSON(200, tools.ResponseError{ |
| 79 | 84 | 401, |
| 80 | 85 | "没有权限", |
| ... | ... | @@ -82,7 +87,7 @@ func CreateDealyMessage(c *gin.Context) { |
| 82 | 87 | return |
| 83 | 88 | } |
| 84 | 89 | |
| 85 | - _, err := primitive.ObjectIDFromHex(c.PostForm("UserId")) | |
| 90 | + _, err = primitive.ObjectIDFromHex(c.PostForm("UserId")) | |
| 86 | 91 | if err != nil { |
| 87 | 92 | c.JSON(200, tools.ResponseError{ |
| 88 | 93 | 1, |
| ... | ... | @@ -124,8 +129,10 @@ func RemoveDealyMessage(c *gin.Context) { |
| 124 | 129 | c.Header("Access-Control-Allow-Credentials", "true") |
| 125 | 130 | |
| 126 | 131 | _user, _ := c.Get("UserInfo") |
| 127 | - userToken := _user.(*DB.SMember) | |
| 128 | - if c.PostForm("UserId") != userToken.Id.Hex(){ | |
| 132 | + user := _user.(*DB.SMember) | |
| 133 | + | |
| 134 | + err := Auth.CheckUserAuth(c.PostForm("UserId"), user) | |
| 135 | + if err != nil { | |
| 129 | 136 | c.JSON(200, tools.ResponseError{ |
| 130 | 137 | 401, |
| 131 | 138 | "没有权限", |
| ... | ... | @@ -133,7 +140,7 @@ func RemoveDealyMessage(c *gin.Context) { |
| 133 | 140 | return |
| 134 | 141 | } |
| 135 | 142 | |
| 136 | - _, err := primitive.ObjectIDFromHex(c.PostForm("UserId")) | |
| 143 | + _, err = primitive.ObjectIDFromHex(c.PostForm("UserId")) | |
| 137 | 144 | if err != nil { |
| 138 | 145 | c.JSON(200, tools.ResponseError{ |
| 139 | 146 | 1, | ... | ... |
| ... | ... | @@ -0,0 +1,33 @@ |
| 1 | +package Api | |
| 2 | + | |
| 3 | +import ( | |
| 4 | + "github.com/aarongao/tools" | |
| 5 | + "github.com/gin-gonic/gin" | |
| 6 | + "letu/Config" | |
| 7 | + "letu/DB" | |
| 8 | +) | |
| 9 | + | |
| 10 | +// @Title 查询系统信息接口 | |
| 11 | +// @Description 查询系统信息接口 | |
| 12 | +// @Accept json | |
| 13 | +// @Produce json | |
| 14 | +// @Success 200 {object} tools.ResponseSeccess "Version=最新版本号UpdateLocationInterval上报位置时间间隔(秒)" | |
| 15 | +// @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" | |
| 16 | +// @Router /SystemInfo? [get] | |
| 17 | +func SystemInfo(c *gin.Context) { | |
| 18 | + c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) | |
| 19 | + c.Header("Access-Control-Allow-Credentials", "true") | |
| 20 | + | |
| 21 | + info := make(map[string]interface{}) | |
| 22 | + info["Version"] = Config.Info.Version | |
| 23 | + | |
| 24 | + | |
| 25 | + UpdateLocationInterval := DB.Redis.Get("UpdateLocationInterval") | |
| 26 | + info["UpdateLocationInterval"] = UpdateLocationInterval | |
| 27 | + | |
| 28 | + c.JSON(200, tools.ResponseSeccess{ | |
| 29 | + 0, | |
| 30 | + info, | |
| 31 | + }) | |
| 32 | + | |
| 33 | +} | ... | ... |
API/User.go
| ... | ... | @@ -8,6 +8,7 @@ import ( |
| 8 | 8 | "go.mongodb.org/mongo-driver/bson/primitive" |
| 9 | 9 | "go.mongodb.org/mongo-driver/mongo/options" |
| 10 | 10 | "letu/DB" |
| 11 | + "letu/Lib/Auth" | |
| 11 | 12 | "letu/Lib/JWT" |
| 12 | 13 | "regexp" |
| 13 | 14 | "time" |
| ... | ... | @@ -165,6 +166,7 @@ func RegisterDevice(c *gin.Context) { |
| 165 | 166 | // @Accept json |
| 166 | 167 | // @Produce json |
| 167 | 168 | // @Param id aaron string true "用户id" |
| 169 | +// @Param Token wgergejfwe string true "用户token" | |
| 168 | 170 | // @Success 200 {object} tools.ResponseSeccess "{"errcode":0,"result":{"Id":"5e09c64c1c09c6f0f7ca2fa9","Token":"640bf934e425aba5d3c90998b2641f2f0ca07261d334d9615d1cd4790b5f34e7"}}" |
| 169 | 171 | // @Failure 500 {object} tools.ResponseError "{"errcode":1,"errmsg":"错误原因"}" |
| 170 | 172 | // @Router /UserInfo? [get] |
| ... | ... | @@ -172,6 +174,9 @@ func UserInfo(c *gin.Context) { |
| 172 | 174 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) |
| 173 | 175 | c.Header("Access-Control-Allow-Credentials", "true") |
| 174 | 176 | |
| 177 | + _user, _ := c.Get("UserInfo") | |
| 178 | + user := _user.(*DB.SMember) | |
| 179 | + | |
| 175 | 180 | objID, err := primitive.ObjectIDFromHex(c.Query("id")) |
| 176 | 181 | if err != nil { |
| 177 | 182 | c.JSON(200, tools.ResponseError{ |
| ... | ... | @@ -185,6 +190,13 @@ func UserInfo(c *gin.Context) { |
| 185 | 190 | DB.CMember.FindOne(tools.GetContext(), bson.M{"_id": objID}).Decode(&User) |
| 186 | 191 | |
| 187 | 192 | User.Device = &DB.SDevice{} |
| 193 | + | |
| 194 | + if user.UserType == "visitor" { | |
| 195 | + User.Username = "" | |
| 196 | + User.Password = "" | |
| 197 | + User.Auth = nil | |
| 198 | + } | |
| 199 | + | |
| 188 | 200 | c.JSON(200, tools.ResponseSeccess{ |
| 189 | 201 | 0, |
| 190 | 202 | User, |
| ... | ... | @@ -251,6 +263,15 @@ func UpdateUser(c *gin.Context) { |
| 251 | 263 | _user, _ := c.Get("UserInfo") |
| 252 | 264 | user := _user.(*DB.SMember) |
| 253 | 265 | |
| 266 | + err := Auth.CheckUserAuth(c.PostForm("id"), user) | |
| 267 | + if err != nil { | |
| 268 | + c.JSON(200, tools.ResponseError{ | |
| 269 | + 401, | |
| 270 | + "没有权限", | |
| 271 | + }) | |
| 272 | + return | |
| 273 | + } | |
| 274 | + | |
| 254 | 275 | if c.PostForm("id") != user.Id.Hex() { |
| 255 | 276 | c.JSON(200, tools.ResponseError{ |
| 256 | 277 | 401, |
| ... | ... | @@ -288,7 +309,7 @@ func UpdateUser(c *gin.Context) { |
| 288 | 309 | } |
| 289 | 310 | |
| 290 | 311 | objID, _ := primitive.ObjectIDFromHex(c.PostForm("id")) |
| 291 | - _, err := DB.CMember.UpdateOne(tools.GetContext(), | |
| 312 | + _, err = DB.CMember.UpdateOne(tools.GetContext(), | |
| 292 | 313 | bson.M{"_id": objID}, |
| 293 | 314 | bson.M{"$set": bson.M{ |
| 294 | 315 | "Birthday": c.PostForm("Birthday"), |
| ... | ... | @@ -329,9 +350,12 @@ func RemoveUser(c *gin.Context) { |
| 329 | 350 | c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) |
| 330 | 351 | c.Header("Access-Control-Allow-Credentials", "true") |
| 331 | 352 | |
| 353 | + | |
| 332 | 354 | _user, _ := c.Get("UserInfo") |
| 333 | 355 | user := _user.(*DB.SMember) |
| 334 | - if c.PostForm("id") != user.Id.Hex() { | |
| 356 | + | |
| 357 | + err := Auth.CheckUserAuth(c.PostForm("id"), user) | |
| 358 | + if err != nil { | |
| 335 | 359 | c.JSON(200, tools.ResponseError{ |
| 336 | 360 | 401, |
| 337 | 361 | "没有权限", | ... | ... |
Lib/Auth/Auth.go
| ... | ... | @@ -4,6 +4,7 @@ import ( |
| 4 | 4 | "github.com/aarongao/tools" |
| 5 | 5 | "github.com/gin-gonic/gin" |
| 6 | 6 | "github.com/pkg/errors" |
| 7 | + "go.mongodb.org/mongo-driver/bson/primitive" | |
| 7 | 8 | "letu/DB" |
| 8 | 9 | "letu/Lib/JWT" |
| 9 | 10 | ) |
| ... | ... | @@ -31,7 +32,6 @@ func Modules(c *gin.Context) { |
| 31 | 32 | 0, |
| 32 | 33 | rs, |
| 33 | 34 | }) |
| 34 | - | |
| 35 | 35 | } |
| 36 | 36 | |
| 37 | 37 | // 检查基础权限 |
| ... | ... | @@ -53,6 +53,13 @@ func CheckAuthFunc(handFunc func(c *gin.Context), auth *DB.SModel) func(c *gin.C |
| 53 | 53 | if token == "" { |
| 54 | 54 | token = c.Request.Header.Get("Token") |
| 55 | 55 | } |
| 56 | + if token == "" { | |
| 57 | + c.JSON(200, tools.ResponseError{ | |
| 58 | + 1, | |
| 59 | + "缺少Token", | |
| 60 | + }) | |
| 61 | + return | |
| 62 | + } | |
| 56 | 63 | |
| 57 | 64 | // 解析token |
| 58 | 65 | user, err := JWT.ParseToken(token) |
| ... | ... | @@ -89,6 +96,11 @@ func CheckScenicAuth(ScenicId string, user *DB.SMember) error { |
| 89 | 96 | return errors.New("景区id不能为空") |
| 90 | 97 | } |
| 91 | 98 | |
| 99 | + _, err := primitive.ObjectIDFromHex(ScenicId) | |
| 100 | + if err != nil { | |
| 101 | + return errors.New("景区id格式不正确") | |
| 102 | + } | |
| 103 | + | |
| 92 | 104 | if user.UserType == "operator" { |
| 93 | 105 | if user.ScenicId != ScenicId { |
| 94 | 106 | return errors.New("权限不正确(需要正确的Token和ScenicId)") |
| ... | ... | @@ -96,3 +108,23 @@ func CheckScenicAuth(ScenicId string, user *DB.SMember) error { |
| 96 | 108 | } |
| 97 | 109 | return nil |
| 98 | 110 | } |
| 111 | + | |
| 112 | +func CheckUserAuth(UserId string, user *DB.SMember) error { | |
| 113 | + | |
| 114 | + if UserId == "" { | |
| 115 | + return errors.New("用户id不能为空") | |
| 116 | + } | |
| 117 | + | |
| 118 | + _, err := primitive.ObjectIDFromHex(UserId) | |
| 119 | + if err != nil { | |
| 120 | + return errors.New("用户id格式不正确") | |
| 121 | + } | |
| 122 | + | |
| 123 | + if user.UserType == "visitor" { | |
| 124 | + if UserId != user.Id.Hex() { | |
| 125 | + return errors.New("权限不正确(需要正确的Token和UserId)") | |
| 126 | + } | |
| 127 | + } | |
| 128 | + | |
| 129 | + return nil | |
| 130 | +} | ... | ... |
Version.md
| ... | ... | @@ -6,8 +6,19 @@ |
| 6 | 6 | |
| 7 | 7 | ##### 变更说明: |
| 8 | 8 | |
| 9 | -1. /UserInfo接口增加权限验证(需要携带Token),区分游客和操作员 | |
| 10 | -2. | |
| 9 | +1. /UserInfo接口增加权限验证(需要携带Token),游客只能查询自己信息,操作员可查询所有。 | |
| 10 | + | |
| 11 | +2. /SystemInfo 新增系统信息接口 | |
| 12 | + | |
| 13 | + ``` | |
| 14 | + { | |
| 15 | + "errcode": 0, | |
| 16 | + "result": { | |
| 17 | + "UpdateLocationInterval": 30,//上报位置时间间隔(秒) | |
| 18 | + "Version": "v1.1"//最新版本号 | |
| 19 | + } | |
| 20 | + } | |
| 21 | + ``` | |
| 11 | 22 | |
| 12 | 23 | ##### 发布流程: |
| 13 | 24 | ... | ... |
main.go
| ... | ... | @@ -114,7 +114,7 @@ func main() { |
| 114 | 114 | //InitController("/CreateUser", Api.CreateUser) |
| 115 | 115 | InitController("POST", "/LoginUser", Api.LoginUser, &DB.SModel{}) |
| 116 | 116 | InitController("POST", "/UpdateUser", Api.UpdateUser, &DB.SModel{"用户管理", "修改"}) |
| 117 | - InitController("GET", "/UserInfo", Api.UserInfo, &DB.SModel{}) | |
| 117 | + InitController("GET", "/UserInfo", Api.UserInfo, &DB.SModel{"用户管理", "查看单条"}) | |
| 118 | 118 | InitController("GET", "/ScenicInfo", Api.ScenicInfo, &DB.SModel{}) |
| 119 | 119 | InitController("GET", "/LineInfo", Api.LineInfo, &DB.SModel{}) |
| 120 | 120 | InitController("GET", "/AllTag", Api.AllTag, &DB.SModel{}) |
| ... | ... | @@ -151,6 +151,7 @@ func main() { |
| 151 | 151 | InitController("POST", "/LoginOperator", Api.LoginOperator, &DB.SModel{}) |
| 152 | 152 | InitController("POST", "/UpdateOperator", Api.UpdateOperator, &DB.SModel{"操作员管理", "增加和修改"}) |
| 153 | 153 | InitController("GET", "/AllOperator", Api.AllOperator, &DB.SModel{"操作员管理", "查看所有"}) |
| 154 | + InitController("GET", "/SystemInfo", Api.SystemInfo, &DB.SModel{}) | |
| 154 | 155 | Gin.GET("/AllModules", Auth.Modules) |
| 155 | 156 | //InitController("/ws", Api.WsPage) |
| 156 | 157 | ... | ... |