|
@@ -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
|
+}
|