Browse Source

框架及用户相关

wangfei 6 years ago
parent
commit
6b7a31c846
6 changed files with 272 additions and 540 deletions
  1. 39
    52
      controllers/auth.go
  2. 1
    1
      controllers/base.go
  3. 91
    0
      controllers/user.go
  4. 67
    0
      models/user/user.go
  5. 0
    487
      service/sys.go
  6. 74
    0
      service/user/user.go

+ 39
- 52
controllers/auth.go View File

@@ -1,54 +1,41 @@
1 1
 package controllers
2 2
 
3
-// Authenticate 权限验证
4
-// 其中 token 的处理方式是
5
-// 1、获取 request 中 token
6
-// 2、放入 Context 中
7
-// 3、校验 token
8
-// 4、结束后,设置过期并从 Context 中删除
9
-// 5、生成新的 token, 并放入 Context 中
10
-// func (c *BaseController) authenticate() {
11
-// 	c.serv = service.NewSysServ(c.Context)
12
-
13
-// 	// 鉴权 - 并初始化上下文
14
-// 	res := c.serv.AuthAndInitCtx(c.Ctx)
15
-
16
-// 	if res != nil {
17
-// 		code := http.StatusOK
18
-// 		if res["code"] != nil {
19
-// 			code = res["code"].(int)
20
-// 		}
21
-
22
-// 		if code != http.StatusOK {
23
-// 			err := res["error"].(error)
24
-// 			data := map[string]interface{}{}
25
-
26
-// 			if res["message"] != nil {
27
-// 				data = res["message"].(map[string]interface{})
28
-// 			}
29
-
30
-// 			c.ResponseData(data, err, code)
31
-// 		}
32
-// 	}
33
-// }
34
-
35
-// // SetTokenExipre 设置 token 过期
36
-// func (c *BaseController) SetTokenExipre(uid string) {
37
-// 	token := c.Context.Get("token")
38
-// 	if token != nil {
39
-// 		c.serv.UpdateTokenExpire(token.(string), uid)
40
-// 	}
41
-
42
-// 	c.Context.Set("token", "")
43
-// }
44
-
45
-// // CreateNewToken 新 token
46
-// func (c *BaseController) CreateNewToken() {
47
-
48
-// 	batchNo := ""
49
-// 	if c.Context.Get("token-batch") != nil {
50
-// 		batchNo = c.Context.Get("token-batch").(string)
51
-// 	}
52
-
53
-// 	c.Context.Set("token", c.serv.NewToken(batchNo))
54
-// }
3
+import (
4
+	"strings"
5
+	"wechat-conf/service/user"
6
+	"wechat-conf/utils"
7
+
8
+	"github.com/astaxie/beego"
9
+)
10
+
11
+const (
12
+	SESSION_USER = "wechat-conf.user"
13
+)
14
+
15
+// auth 鉴权
16
+func (c *BaseController) auth() {
17
+	apiPrefix := beego.AppConfig.String("ApiPrefix")
18
+	path := strings.TrimPrefix(c.Ctx.Request.URL.Path, apiPrefix)
19
+	method := c.Ctx.Request.Method
20
+	userID, _ := c.GetSession(SESSION_USER).(string)
21
+	serv := user.NewUserServ(c.Context)
22
+
23
+	code, err := serv.CheckUserRoute(userID, path, method)
24
+	if err != nil {
25
+		c.ResponseError(err, code)
26
+	}
27
+
28
+	if userID != "" {
29
+		userDetail, err := serv.GetUserByID(userID)
30
+
31
+		if err != nil {
32
+			c.ResponseError(err)
33
+		}
34
+
35
+		if userDetail.UserId == "" {
36
+			c.ResponseError(utils.LogError("用户不存在, 请重新登录"))
37
+		}
38
+
39
+		c.Context.Set("user", userDetail)
40
+	}
41
+}

+ 1
- 1
controllers/base.go View File

@@ -28,7 +28,7 @@ func (c *BaseController) Prepare() {
28 28
 	c.initContext()
29 29
 
30 30
 	// 鉴权
31
-	// c.authenticate()
31
+	c.auth()
32 32
 
33 33
 	// 路由对应的实际 Controller 初始化
34 34
 	c.initController()

+ 91
- 0
controllers/user.go View File

@@ -0,0 +1,91 @@
1
+package controllers
2
+
3
+import (
4
+	"wechat-conf/models/model"
5
+	"wechat-conf/service/user"
6
+	"wechat-conf/utils"
7
+
8
+	"github.com/astaxie/beego"
9
+)
10
+
11
+// UserController 用户
12
+type UserController struct {
13
+	serv *user.UserServ
14
+	BaseController
15
+}
16
+
17
+// Constructor 初始化 Controller
18
+// @Title Constructor
19
+// @Description 初始化 Controller, 系统自动调用
20
+func (c *UserController) Constructor() {
21
+	c.serv = user.NewUserServ(c.Context)
22
+}
23
+
24
+// Login 用户登录
25
+func (c *UserController) Login() {
26
+
27
+	var user *model.SysUser
28
+	var err error
29
+	// 如果有 session 就算已经登录
30
+	userId := c.GetSession(SESSION_USER)
31
+	if userId != nil {
32
+		c.ResponseError(utils.LogError("用户已经登录!"))
33
+	}
34
+	userName := c.GetString("UserName")
35
+	pwd := c.GetString("UserPass")
36
+	if userName == "" || pwd == "" {
37
+		c.ResponseError(utils.LogError("用户名或密码不能为空!"))
38
+	}
39
+	user, err = c.serv.ValidUserNameLogin(userName, pwd)
40
+	if err != nil {
41
+		beego.Error("用户登录失败, ", err)
42
+		c.ResponseError(utils.LogError("用户名或密码错误"))
43
+	}
44
+
45
+	// 密码不能送到前端
46
+	user.Pwd = ""
47
+
48
+	c.SetSession(SESSION_USER, user.UserId)
49
+	c.ResponseJSON(user)
50
+}
51
+
52
+// SignOut 登出
53
+// @Title 登出
54
+// @Description 登出
55
+// @Success 200 string ok-string
56
+// @Failure >300 error message
57
+func (c *UserController) SignOut() {
58
+	c.Context.Set("user", nil)
59
+	c.DestroySession()
60
+
61
+	c.ResponseJSON("ok")
62
+}
63
+
64
+// UpdatePassword 更新用户密码
65
+// @Title 更新用户密码
66
+// @Description 更新用户密码
67
+// @Param   oriPasswd     form    string  true        "旧密码"
68
+// @Param   newPasswd     form    string  true        "新密码"
69
+// @Success 200 string ok-string
70
+// @Failure >300 error message
71
+func (c *UserController) UpdatePassword() {
72
+	oriPasswd := c.GetString("oriPasswd")
73
+	newPasswd := c.GetString("newPasswd")
74
+	user := c.Context.Get("user").(*model.SysUser)
75
+
76
+	if !c.serv.ValidatePassword(user, oriPasswd) {
77
+		c.ResponseError(utils.LogError("原始密码不正确"))
78
+	}
79
+
80
+	if err := c.serv.UpdatePassword(user.UserId, newPasswd); err != nil {
81
+		c.ResponseError(err)
82
+	}
83
+
84
+	c.ResponseJSON("ok")
85
+}
86
+
87
+// GetUser 获取用户信息
88
+func (c *UserController) GetUser() {
89
+	user := c.Context.Get("user").(*model.SysUser)
90
+	c.ResponseJSON(user)
91
+}

+ 67
- 0
models/user/user.go View File

@@ -0,0 +1,67 @@
1
+package user
2
+
3
+import (
4
+	"wechat-conf/models/model"
5
+	"wechat-conf/utils"
6
+
7
+	"github.com/go-xorm/xorm"
8
+	"github.com/yl10/kit/encrypt"
9
+)
10
+
11
+// UserDAO 当前数据库操作对象
12
+type UserDAO struct {
13
+	ctx *utils.Context
14
+	db  *xorm.Session
15
+}
16
+
17
+// NewUserDAO New Inst
18
+func NewUserDAO(ctx *utils.Context) *UserDAO {
19
+	return &UserDAO{
20
+		ctx: ctx,
21
+		db:  ctx.DB,
22
+	}
23
+}
24
+
25
+//GetUserByUserName  通过用户名获取用户信息
26
+func (m *UserDAO) GetUserByUserName(name string) (model.SysUser, error) {
27
+	query := `
28
+			SELECT * FROM
29
+		    	sys_user t
30
+				WHERE
31
+				user_name = '` + name + `'`
32
+
33
+	user := new(model.SysUser)
34
+	if has, err := m.db.Sql(query).Get(user); err != nil {
35
+		return *user, err
36
+	} else if !has {
37
+		return *user, utils.LogError("账户不存在")
38
+	}
39
+
40
+	return *user, nil
41
+}
42
+
43
+// UpdatePassword 更新用户密码
44
+func (m *UserDAO) UpdatePassword(userId, newPass string) error {
45
+	password := encrypt.Md5(newPass, userId)
46
+
47
+	sql := "update sys_user set pwd=? where user_id=?"
48
+
49
+	_, err := m.db.Exec(sql, password, userId)
50
+	if err != nil {
51
+		return utils.LogError("更新新密码出错", err)
52
+	}
53
+
54
+	return nil
55
+}
56
+
57
+// GetUserByID 获取用户信息
58
+func (m *UserDAO) GetUserByID(userId string) (*model.SysUser, error) {
59
+	var user model.SysUser
60
+	_, err := m.db.Where("user_id=?", userId).Get(&user)
61
+
62
+	if err != nil {
63
+		return nil, utils.LogError("获取人员信息失败", err)
64
+	}
65
+
66
+	return &user, nil
67
+}

+ 0
- 487
service/sys.go View File

@@ -19,490 +19,3 @@ func NewSysServ(ctx *utils.Context) *SysServ {
19 19
 		ctx: ctx,
20 20
 	}
21 21
 }
22
-
23
-// // AuthAndInitCtx 鉴权
24
-// // gctx 是 beego 框架中的 Context
25
-// func (s *SysServ) AuthAndInitCtx(gctx *context.Context) map[string]interface{} {
26
-// 	// 确认机构
27
-// 	orgID := gctx.Input.Query(":org")
28
-// 	if orgID == "" {
29
-// 		return map[string]interface{}{
30
-// 			"code":  http.StatusBadRequest,
31
-// 			"error": errors.New("接口地址访问不正确"),
32
-// 		}
33
-// 	}
34
-// 	if err := s.SetOrgByID(orgID); err != nil {
35
-// 		return map[string]interface{}{
36
-// 			"code":  http.StatusInternalServerError,
37
-// 			"error": err,
38
-// 		}
39
-// 	}
40
-
41
-// 	// 客户端类型
42
-// 	// 通过 UA 判断
43
-// 	clientType := utils.GetClientType(gctx.Request)
44
-
45
-// 	// pc 管理端
46
-// 	if clientType == utils.ClientAdmin {
47
-// 		return s.authPCAdmin(gctx)
48
-// 	}
49
-
50
-// 	// 小程序 端
51
-// 	if strings.Index(gctx.Input.URI(), "/wechat/mini") > -1 {
52
-// 		return s.authMini(gctx)
53
-// 	}
54
-
55
-// 	// wechat 端
56
-// 	if clientType == utils.ClientWechat {
57
-// 		return s.authWechat(gctx)
58
-// 	}
59
-
60
-// 	// if clientType == utils.ClientMini {
61
-// 	// 	return s.authMini(gctx)
62
-// 	// }
63
-
64
-// 	return map[string]interface{}{
65
-// 		"code":  http.StatusBadRequest,
66
-// 		"error": errors.New("暂无该客户端的 API"),
67
-// 	}
68
-// }
69
-
70
-// // NewToken 设置 TOKEN
71
-// // 15 分钟后过期
72
-// func (s *SysServ) NewToken(batch string) string {
73
-// 	var token *utils.JWTToken
74
-// 	exp := time.Now().Local().Add(15 * time.Second)
75
-
76
-// 	if s.ctx.Get("userMap") != nil {
77
-// 		userMap := s.ctx.Get("userMap").(model.TaUserMapping)
78
-
79
-// 		token = &utils.JWTToken{
80
-// 			Guest:   false,
81
-// 			ID:      userMap.Openid,
82
-// 			Expire:  exp,
83
-// 			BatchNo: batch,
84
-// 		}
85
-// 	} else if s.ctx.Get("user") != nil {
86
-// 		user := s.ctx.Get("user").(model.SysUser)
87
-
88
-// 		token = &utils.JWTToken{
89
-// 			Guest:   false,
90
-// 			ID:      user.UserId,
91
-// 			Expire:  exp,
92
-// 			BatchNo: batch,
93
-// 		}
94
-// 	} else {
95
-// 		token = &utils.JWTToken{
96
-// 			Guest:  true,
97
-// 			Expire: exp,
98
-// 		}
99
-// 	}
100
-
101
-// 	tokenEncodeStr, err := utils.CreateToken(token.ToMap())
102
-// 	if err != nil {
103
-// 		utils.LogError("系统生成 Token 失败: " + err.Error())
104
-// 		return ""
105
-// 	}
106
-
107
-// 	// 入库
108
-// 	if !token.Guest {
109
-// 		if err := models.InsertToken(tokenEncodeStr, token.ID, batch, exp); err != nil {
110
-// 			utils.LogError("入库 Token 失败: " + err.Error())
111
-// 			return tokenEncodeStr
112
-// 		}
113
-// 	}
114
-
115
-// 	return tokenEncodeStr
116
-// }
117
-
118
-// // authPCAdmin
119
-// // 管理端 API 校验
120
-// func (s *SysServ) authPCAdmin(gctx *context.Context) map[string]interface{} {
121
-// 	if !s.needAuth(gctx) {
122
-// 		return nil
123
-// 	}
124
-
125
-// 	// 获取 token
126
-// 	token, err := s.getToken(gctx)
127
-// 	if err != nil {
128
-// 		// token 报错一律视为需要重新登录
129
-// 		return map[string]interface{}{
130
-// 			"code":  http.StatusUnauthorized,
131
-// 			"error": err,
132
-// 		}
133
-// 	}
134
-
135
-// 	if token.ID == "" || token.Guest == true {
136
-// 		return map[string]interface{}{
137
-// 			"code":  http.StatusUnauthorized,
138
-// 			"error": errors.New("用户未登录"),
139
-// 		}
140
-// 	}
141
-
142
-// 	if err := s.SetUserProfile(token.ID); err != nil {
143
-// 		return map[string]interface{}{
144
-// 			"code":  http.StatusInternalServerError,
145
-// 			"error": err,
146
-// 		}
147
-// 	}
148
-
149
-// 	return nil
150
-// }
151
-
152
-// func (s *SysServ) authWechat(gctx *context.Context) map[string]interface{} {
153
-// 	var wxUser *utils.WechatUser
154
-// 	var openID string
155
-
156
-// 	if beego.BConfig.RunMode == "dev" {
157
-// 		openID = "OPENID"
158
-// 	} else {
159
-// 		// 初始化微信配置
160
-// 		if err := s.initWechatClient(s.org.OrgId); err != nil {
161
-// 			utils.LogError("初始化微信服务失败: " + err.Error())
162
-
163
-// 			return map[string]interface{}{
164
-// 				"code":  http.StatusInternalServerError,
165
-// 				"error": errors.New("初始化微信服务失败"),
166
-// 			}
167
-// 		}
168
-
169
-// 		// 微信 code
170
-// 		code := gctx.Input.Query("code")
171
-
172
-// 		// 获取 token
173
-// 		token, err := s.getToken(gctx)
174
-// 		if err != nil {
175
-// 			tokenStr := s.ctx.Get("token").(string)
176
-// 			if tokenStr != "" {
177
-// 				// token 报错一律视为需要重新登录
178
-// 				return map[string]interface{}{
179
-// 					"code":  http.StatusUnauthorized,
180
-// 					"error": err,
181
-// 					"message": map[string]interface{}{
182
-// 						"appid": utils.GetWxAppID(s.org.OrgId),
183
-// 					},
184
-// 				}
185
-// 			}
186
-// 		}
187
-
188
-// 		// 未登录 或 未验证
189
-// 		if token == nil || token.ID == "" {
190
-// 			if code == "" {
191
-// 				return map[string]interface{}{
192
-// 					"code":  http.StatusUnauthorized,
193
-// 					"error": errors.New("请授权微信用户登录"),
194
-// 					"message": map[string]interface{}{
195
-// 						"appid": utils.GetWxAppID(s.org.OrgId),
196
-// 					},
197
-// 				}
198
-// 			}
199
-
200
-// 			// 微信用户信息
201
-// 			var err error
202
-// 			wxUser, err = s.wechartSignIn(gctx, code)
203
-// 			if err != nil {
204
-// 				return map[string]interface{}{
205
-// 					"code":  http.StatusInternalServerError,
206
-// 					"error": err,
207
-// 				}
208
-// 			}
209
-
210
-// 			if wxUser == nil {
211
-// 				return map[string]interface{}{
212
-// 					"code":  http.StatusInternalServerError,
213
-// 					"error": errors.New("请先关注公众号"),
214
-// 				}
215
-// 			}
216
-
217
-// 			utils.LogError("获取到微信人员: ", wxUser)
218
-
219
-// 			openID = wxUser.OpenID
220
-// 		} else {
221
-// 			openID = token.ID
222
-// 		}
223
-// 	}
224
-
225
-// 	// 查询数据库是否存在已有映射
226
-// 	userMapList, err := models.GetUserMappingByOpenID(openID)
227
-// 	if err != nil {
228
-// 		utils.LogError("校验人员失败: " + err.Error())
229
-// 		return map[string]interface{}{
230
-// 			"code":  http.StatusInternalServerError,
231
-// 			"error": errors.New("校验人员失败"),
232
-// 		}
233
-// 	}
234
-
235
-// 	var userMapping *model.TaUserMapping
236
-// 	for _, ump := range userMapList {
237
-// 		if openID == ump.Openid && models.ACCMAP_WECHAT == ump.AccountType {
238
-// 			userMapping = &ump
239
-// 		}
240
-// 	}
241
-
242
-// 	// 如果尚无人员映射信息, 代表人员初次使用本系统
243
-// 	if userMapping == nil {
244
-// 		// 如果没有微信用户信息, 代表产生了未知异常
245
-// 		if wxUser == nil || wxUser.OpenID == "" {
246
-// 			return map[string]interface{}{
247
-// 				"code":  http.StatusInternalServerError,
248
-// 				"error": errors.New("系统异常, 请清空缓存后重试"),
249
-// 			}
250
-// 		}
251
-
252
-// 		wxInfoJSON, err := json.Marshal(wxUser)
253
-// 		if err != nil {
254
-// 			utils.LogError("转换微信json信息失败: " + err.Error())
255
-// 			return map[string]interface{}{
256
-// 				"code":  http.StatusInternalServerError,
257
-// 				"error": errors.New("微信信息异常"),
258
-// 			}
259
-// 		}
260
-
261
-// 		userMapping = &model.TaUserMapping{
262
-// 			AccountType: models.ACCMAP_WECHAT,
263
-// 			Openid:      openID,
264
-// 			Uuid:        wxUser.UnionID,
265
-// 			AccountInfo: string(wxInfoJSON),
266
-// 		}
267
-// 	}
268
-
269
-// 	// 防止JSON解析失败
270
-// 	if userMapping.AccountInfo == "" {
271
-// 		userMapping.AccountInfo = "{}"
272
-// 	}
273
-
274
-// 	// 更新映射信息, 没有的话则插入
275
-// 	err = models.EditUserMapping(userMapping)
276
-// 	if err != nil {
277
-// 		utils.LogError("保存用户映射信息失败: " + err.Error())
278
-// 		return map[string]interface{}{
279
-// 			"code":  http.StatusInternalServerError,
280
-// 			"error": errors.New("更新用户信息失败"),
281
-// 		}
282
-// 	}
283
-// 	s.ctx.Set("userMap", *userMapping)
284
-
285
-// 	// if !s.needAuth(gctx) {
286
-// 	// 	return nil
287
-// 	// }
288
-
289
-// 	var cust *model.TaCustomer
290
-
291
-// 	// 如果只有映射, 但是没有人员信息
292
-// 	// 则新增人员
293
-// 	if userMapping.UserId == "" {
294
-// 		cust, err = s.saveNewCustomer(wxUser, userMapping)
295
-// 		if err != nil {
296
-// 			return map[string]interface{}{
297
-// 				"code":  http.StatusInternalServerError,
298
-// 				"error": err,
299
-// 			}
300
-// 		}
301
-// 	} else {
302
-// 		cust, err = models.GetCustomerByID(userMapping.UserId)
303
-// 		if err != nil {
304
-// 			utils.LogError("查询用户信息失败: " + err.Error())
305
-// 			return map[string]interface{}{
306
-// 				"code":  http.StatusInternalServerError,
307
-// 				"error": err,
308
-// 			}
309
-// 		}
310
-// 	}
311
-// 	s.ctx.Set("customer", *cust)
312
-
313
-// 	if cust.UserId != "" {
314
-// 		if err := s.SetUserProfile(cust.UserId); err != nil {
315
-// 			return map[string]interface{}{
316
-// 				"code":  http.StatusInternalServerError,
317
-// 				"error": err,
318
-// 			}
319
-// 		}
320
-// 	}
321
-
322
-// 	return nil
323
-// }
324
-
325
-// // 小程序端暂时无人员或者其他业务要求
326
-// func (s *SysServ) authMini(gctx *context.Context) map[string]interface{} {
327
-// 	if err := s.initMiniClient(s.org.OrgId); err != nil {
328
-// 		utils.LogError("初始化小程序服务失败: " + err.Error())
329
-
330
-// 		return map[string]interface{}{
331
-// 			"code":  http.StatusInternalServerError,
332
-// 			"error": errors.New("初始化小程序服务失败"),
333
-// 		}
334
-// 	}
335
-
336
-// 	return nil
337
-// }
338
-
339
-// // wechartSignIn 使用 code 微信登录
340
-// func (s *SysServ) wechartSignIn(gctx *context.Context, code string) (*utils.WechatUser, error) {
341
-// 	// 获取 微信信息
342
-// 	// 可能出现的情况是 openid 获取到了, 但是详情没有获取到
343
-// 	wxUserMap, err := utils.WxClientFor(s.org.OrgId).GetUserInfo(code)
344
-// 	if err != nil {
345
-// 		utils.LogError("获取微信信息失败: " + err.Error())
346
-
347
-// 		if wxUserMap == nil {
348
-// 			return nil, errors.New("获取微信信息失败")
349
-// 		}
350
-// 	}
351
-
352
-// 	return utils.MapToWechatUser(wxUserMap), nil
353
-// }
354
-
355
-// func (s *SysServ) getToken(gctx *context.Context) (*utils.JWTToken, error) {
356
-// 	tokenEnStr := gctx.Input.Query("token")
357
-// 	if tokenEnStr == "" {
358
-// 		tokenRaw := gctx.Input.Header(utils.TokenHeader)
359
-// 		if tokenRaw == "" {
360
-// 			return new(utils.JWTToken), nil
361
-// 		}
362
-
363
-// 		tokenEnStr = strings.Trim(strings.TrimLeft(tokenRaw, utils.TokenSchema), " ")
364
-// 	} else {
365
-// 		tokenEnStr = strings.Trim(strings.TrimLeft(tokenEnStr, utils.TokenSchema), " ")
366
-// 	}
367
-
368
-// 	s.ctx.Set("token", tokenEnStr)
369
-
370
-// 	token, err := utils.PareseToken(tokenEnStr)
371
-// 	if err != nil {
372
-// 		utils.LogError("解析 Token 失败: " + err.Error())
373
-// 		return nil, errors.New("解析Token失败或已过期")
374
-// 	}
375
-
376
-// 	// 校验 token
377
-// 	tk, err := models.GetToken(tokenEnStr)
378
-// 	if err != nil {
379
-// 		utils.LogError("查询 Token 失败: " + err.Error())
380
-// 		return nil, errors.New("校验Token失败或已过期")
381
-// 	}
382
-
383
-// 	if tk.Status == models.STATUS_DEL {
384
-// 		return nil, errors.New("超时 或者 Token 已过期")
385
-// 	}
386
-
387
-// 	s.ctx.Set("token-batch", tk.BatchNo)
388
-// 	return utils.MapToJWTToken(token), nil
389
-// }
390
-
391
-// // UpdateTokenExpire 更新 token 为过期
392
-// // 如果发生错误, 此处选择忽略
393
-// func (s *SysServ) UpdateTokenExpire(token, uid string) {
394
-// 	if err := models.UpdateTokenExpire(token, uid); err != nil {
395
-// 		utils.LogError("更新 Token 过期失败: " + err.Error())
396
-// 	}
397
-// }
398
-
399
-// func (s *SysServ) needAuth(gctx *context.Context) bool {
400
-// 	route := gctx.Input.URL()
401
-// 	apiPrefix := beego.AppConfig.String("api::prefix")
402
-// 	guestAPI := beego.AppConfig.String("api::guest")
403
-
404
-// 	if strings.Index(route, apiPrefix+strings.Split(guestAPI, ":")[0]) > -1 {
405
-// 		return false
406
-// 	}
407
-
408
-// 	return true
409
-// }
410
-
411
-// // SetUserProfile 设置用户信息
412
-// func (s *SysServ) SetUserProfile(id string) error {
413
-// 	user, err := models.GetPureUserInfo(id)
414
-// 	if err != nil {
415
-// 		return utils.LogError("获取用户基本信息失败: " + err.Error())
416
-// 	}
417
-// 	s.ctx.Set("user", *user)
418
-
419
-// 	cases, err := models.GetUserCase(id)
420
-// 	if err != nil {
421
-// 		return utils.LogError("获取用户案场信息失败: " + err.Error())
422
-// 	}
423
-// 	s.ctx.Set("cases", cases)
424
-
425
-// 	found := false
426
-// 	for _, cs := range cases {
427
-// 		if cs.IsBelong == models.BOOL_TRUE {
428
-// 			found = true
429
-// 			s.ctx.Set("currentCase", cs)
430
-// 		}
431
-// 	}
432
-
433
-// 	if !found {
434
-// 		utils.LogError("用户没有设置默认案场")
435
-// 	}
436
-
437
-// 	return nil
438
-// }
439
-
440
-// // saveNewCustomer 新增用户
441
-// func (s *SysServ) saveNewCustomer(wxUser *utils.WechatUser, userMap *model.TaUserMapping) (*model.TaCustomer, error) {
442
-// 	cust := model.TaCustomer{
443
-// 		CustomerName: wxUser.NickName,
444
-// 		Name:         wxUser.NickName,
445
-// 		Sex:          int(wxUser.Sex),
446
-// 		Headimgurl:   wxUser.HeadImgURL,
447
-// 		OrgId:        s.org.OrgId,
448
-// 	}
449
-
450
-// 	if err := models.SaveCustomer(&cust); err != nil {
451
-// 		utils.LogError("更新客户信息失败: " + err.Error())
452
-// 		return nil, errors.New("更新客户信息失败")
453
-// 	}
454
-
455
-// 	account := new(model.TaCustomerAccount)
456
-// 	account.CustomerId = cust.CustomerId
457
-// 	account.CustomerName = cust.CustomerName
458
-// 	account.OrgId = cust.OrgId
459
-// 	account.Amount = "0"
460
-// 	account.Points = "0"
461
-// 	account.PayedAmount = "0"
462
-// 	account.PayedPoints = "0"
463
-
464
-// 	if err := models.SaveAccount(account); err != nil {
465
-// 		utils.LogError("插入账户信息失败: " + err.Error())
466
-// 		return nil, errors.New("更新客户信息失败")
467
-// 	}
468
-
469
-// 	// 更新映射表信息
470
-// 	userMap.UserId = cust.CustomerId
471
-// 	if err := models.UpdateUserMapping(userMap, []string{"user_id"}); err != nil {
472
-// 		utils.LogError("更新用户映射信息失败:" + err.Error())
473
-// 		return nil, errors.New("映射用户信息失败")
474
-// 	}
475
-
476
-// 	return &cust, nil
477
-// }
478
-
479
-// // initWechatClient 初始化微信客户端
480
-// func (s *SysServ) initWechatClient(orgID string) error {
481
-// 	cert, err := models.GetWeChatConfig(orgID, models.WECHAT_WX)
482
-// 	if err != nil {
483
-// 		utils.LogError("获取微信配置失败: " + err.Error())
484
-// 		return errors.New("获取微信配置失败")
485
-// 	}
486
-
487
-// 	if cert == nil {
488
-// 		return errors.New("未找到微信配置")
489
-// 	}
490
-
491
-// 	utils.WxClientSingleton(orgID, cert)
492
-// 	return nil
493
-// }
494
-
495
-// func (s *SysServ) initMiniClient(orgID string) error {
496
-// 	cert, err := models.GetWeChatConfig(orgID, models.WECHAT_MINI)
497
-// 	if err != nil {
498
-// 		utils.LogError("获取小程序配置失败: " + err.Error())
499
-// 		return errors.New("获取小程序配置失败")
500
-// 	}
501
-
502
-// 	if cert == nil {
503
-// 		return errors.New("未找到小程序配置")
504
-// 	}
505
-
506
-// 	utils.MiniClientSingleton(orgID, cert)
507
-// 	return nil
508
-// }

+ 74
- 0
service/user/user.go View File

@@ -0,0 +1,74 @@
1
+package user
2
+
3
+import (
4
+	"net/http"
5
+	"strings"
6
+	"wechat-conf/models/model"
7
+	"wechat-conf/models/user"
8
+	"wechat-conf/utils"
9
+	"wechat/helper"
10
+
11
+	"github.com/yl10/kit/encrypt"
12
+)
13
+
14
+// UserServ 用户
15
+type UserServ struct {
16
+	ctx *utils.Context
17
+	dao *user.UserDAO
18
+}
19
+
20
+// NewUserServ 初始化
21
+func NewUserServ(ctx *utils.Context) *UserServ {
22
+	return &UserServ{
23
+		ctx: ctx,
24
+		dao: user.NewUserDAO(ctx),
25
+	}
26
+}
27
+
28
+// CheckUserRoute 判断用户理由
29
+func (s *UserServ) CheckUserRoute(userId, route, method string) (int, error) {
30
+
31
+	if strings.Index(route, "admin") < 0 {
32
+		return http.StatusOK, nil
33
+	}
34
+
35
+	// 如果没有登录
36
+	if userId == "" {
37
+		return http.StatusUnauthorized, utils.LogError("请先登录系统")
38
+	}
39
+
40
+	return http.StatusOK, nil
41
+}
42
+
43
+// ValidUserNameLogin 验证登陆
44
+func (s *UserServ) ValidUserNameLogin(userName, pass string) (*model.SysUser, error) {
45
+	user, err := s.dao.GetUserByUserName(userName)
46
+	if err != nil {
47
+		return nil, err
48
+	}
49
+
50
+	if !s.ValidatePassword(&user, pass) {
51
+		return nil, helper.LogError("用户密码不正确")
52
+	}
53
+
54
+	return &user, nil
55
+}
56
+
57
+// UpdatePassword 更新用户密码
58
+func (s *UserServ) UpdatePassword(userID, newPass string) error {
59
+	return s.dao.UpdatePassword(userID, newPass)
60
+}
61
+
62
+// ValidatePassword 验证密码是否正确
63
+func (m *UserServ) ValidatePassword(user *model.SysUser, password string) bool {
64
+	return user.Pwd == encrypt.Md5(password, user.UserId)
65
+}
66
+
67
+// GetUserByID 根据ID获取用户信息
68
+func (s *UserServ) GetUserByID(userid string) (*model.SysUser, error) {
69
+	user, err := s.dao.GetUserByID(userid)
70
+	if err != nil {
71
+		return nil, err
72
+	}
73
+	return user, nil
74
+}