csx 2 år sedan
förälder
incheckning
26aadbcb6a
1 ändrade filer med 83 tillägg och 6 borttagningar
  1. 83 6
      controllers/mobile_api_controllers/mobile_api_base_controller.go

+ 83 - 6
controllers/mobile_api_controllers/mobile_api_base_controller.go Visa fil

@@ -5,8 +5,14 @@ import (
5 5
 	"XT_New/enums"
6 6
 	"XT_New/models"
7 7
 	"XT_New/service"
8
+	"bytes"
8 9
 	"encoding/json"
9 10
 	"fmt"
11
+	"log"
12
+	"os"
13
+	"path"
14
+	"regexp"
15
+	"runtime"
10 16
 	"strconv"
11 17
 	"strings"
12 18
 	"time"
@@ -106,18 +112,30 @@ func (this *MobileBaseAPIAuthController) Prepare() {
106 112
 
107 113
 	if this.Ctx.Request.Header.Get("Permission") == "1" {
108 114
 		if adminUserInfo.AdminUser.Id != adminUserInfo.Org.Creator { //超级管理员不受此限制
115
+			err_msgs := LoadErrMsgConfig("./err_msg.json").Msgs
109 116
 
110 117
 			isPermission := false
111 118
 			adminUserInfo := this.GetMobileAdminUserInfo()
112 119
 			//该机构下该用户有多少个
113
-			role, _ := service.GetUserAllRole(adminUserInfo.Org.Id, adminUserInfo.AdminUser.Id)
120
+			redisClient := service.RedisClient()
121
+			defer redisClient.Close()
122
+			key2 := strconv.FormatInt(adminUserInfo.Org.Id, 64) + "_" + strconv.FormatInt(adminUserInfo.AdminUser.Id, 64) + "_role_ids"
123
+			result, _ := redisClient.Get(key2).Result()
124
+			var role models.App_Role
114 125
 			var roles []string
115
-			if len(role.RoleIds) <= 0 { //该用户没有设置角色
116
-
126
+			if len(result) == 0 {
127
+				//该机构下该用户有多少个
128
+				role, _ = service.GetUserAllRole(adminUserInfo.Org.Id, adminUserInfo.AdminUser.Id)
129
+				redisClient.Set(key2, role, time.Second*60*60*18)
130
+				if len(role.RoleIds) > 0 { //该用户没有设置角色
131
+					roles = strings.Split(role.RoleIds, ",")
132
+				}
117 133
 			} else {
118
-				roles = strings.Split(role.RoleIds, ",")
134
+				json.Unmarshal([]byte(result), &role)
135
+				if len(role.RoleIds) > 0 { //该用户没有设置角色
136
+					roles = strings.Split(role.RoleIds, ",")
137
+				}
119 138
 			}
120
-
121 139
 			//redis相关处理逻辑
122 140
 			redis := service.RedisClient()
123 141
 			defer redis.Close()
@@ -177,7 +195,14 @@ func (this *MobileBaseAPIAuthController) Prepare() {
177 195
 						}
178 196
 					}
179 197
 					if !isPermission {
180
-						msg, _ := service.FindErrorMsgByStr(strings.Split(this.Ctx.Request.RequestURI, "?")[0] + "?" + "mode=" + this.GetString("mode"))
198
+						//msg, _ := service.FindErrorMsgByStr(strings.Split(this.Ctx.Request.RequestURI, "?")[0] + "?" + "mode=" + this.GetString("mode"))
199
+						var msg string
200
+						for _, item := range err_msgs {
201
+							if strings.Index(item.Url, strings.Split(this.Ctx.Request.RequestURI, "?")[0]+"?"+"mode="+this.GetString("mode")) != -1 {
202
+								msg = item.ErrMsg
203
+							}
204
+						}
205
+
181 206
 						json := make(map[string]interface{})
182 207
 						json["msg"] = msg
183 208
 						json["code"] = 0
@@ -224,3 +249,55 @@ type AdminUserInfo struct {
224 249
 	AppUrlfors   map[int64][]string                   `json:"app_urlfors"`
225 250
 	Subscibes    map[int64]*models.ServeSubscibe      `json:"org_subscibes"`
226 251
 }
252
+
253
+type ErrMsgConfig struct {
254
+	Msgs []*models.ErrMsg "json:msg"
255
+}
256
+
257
+func LoadErrMsgConfig(dataFile string) *ErrMsgConfig {
258
+	var config ErrMsgConfig
259
+	_, filename, _, _ := runtime.Caller(1)
260
+	datapath := path.Join(path.Dir(filename), dataFile)
261
+	config_file, err := os.Open(datapath)
262
+	if err != nil {
263
+		emit("Failed to open config file '%s': %s\n", datapath, err)
264
+		return &config
265
+	}
266
+	fi, _ := config_file.Stat()
267
+	buffer := make([]byte, fi.Size())
268
+	_, err = config_file.Read(buffer)
269
+	buffer, err = StripComments(buffer) //去掉注释
270
+	if err != nil {
271
+		emit("Failed to strip comments from json: %s\n", err)
272
+		return &config
273
+	}
274
+	buffer = []byte(os.ExpandEnv(string(buffer))) //特殊
275
+	err = json.Unmarshal(buffer, &config)         //解析json格式数据
276
+	if err != nil {
277
+		emit("Failed unmarshalling json: %s\n", err)
278
+		return &config
279
+	}
280
+	return &config
281
+}
282
+
283
+func emit(msgfmt string, args ...interface{}) {
284
+	log.Printf(msgfmt, args...)
285
+}
286
+
287
+func StripComments(data []byte) ([]byte, error) {
288
+	data = bytes.Replace(data, []byte("\r"), []byte(""), 0) // Windows
289
+	lines := bytes.Split(data, []byte("\n"))                //split to muli lines
290
+	filtered := make([][]byte, 0)
291
+
292
+	for _, line := range lines {
293
+		match, err := regexp.Match(`^\s*#`, line)
294
+		if err != nil {
295
+			return nil, err
296
+		}
297
+		if !match {
298
+			filtered = append(filtered, line)
299
+		}
300
+	}
301
+
302
+	return bytes.Join(filtered, []byte("\n")), nil
303
+}