sys_user.go 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676
  1. package service
  2. import (
  3. "context"
  4. comModel "dashoo.cn/micro/app/common/model"
  5. "dashoo.cn/micro/app/common/service"
  6. "dashoo.cn/micro/app/dao"
  7. "dashoo.cn/micro/app/model"
  8. "dashoo.cn/opms_libary/micro_srv"
  9. "dashoo.cn/opms_libary/utils"
  10. "errors"
  11. "fmt"
  12. "github.com/gogf/gf/container/gset"
  13. "github.com/gogf/gf/database/gdb"
  14. "github.com/gogf/gf/errors/gerror"
  15. "github.com/gogf/gf/frame/g"
  16. "github.com/gogf/gf/util/gconv"
  17. "github.com/gogf/gf/util/grand"
  18. )
  19. type UserService struct {
  20. Dao *dao.SysUserDao
  21. }
  22. func NewUserService(ctx context.Context) (*UserService, error) {
  23. user := new(UserService)
  24. // 获取租户码
  25. tenant, err := micro_srv.GetTenant(ctx)
  26. if err != nil {
  27. return nil, err
  28. }
  29. g.Log().Info("Received User.Login request @ " + tenant)
  30. user.Dao = dao.NewSysUserDao(tenant)
  31. return user, err
  32. }
  33. //// Login 用户登录,成功返回用户UUID,否则返回空字符串;
  34. //func (s *sysUser) Login(ctx context.Context, tenant, username, password string) (interface{}, error) {
  35. // record, err := s.SafeModel.Where("username", username).Where("Enabled=1").FindOne()
  36. // if err != nil {
  37. // return nil, errors.New("系统异常")
  38. // }
  39. // if record.IsEmpty() {
  40. // return nil, errors.New("账号或密码错误,或限制登录")
  41. // }
  42. //
  43. // encodedPwd := record["UserPassword"].String()
  44. // pubKey := record["PublicKey"].String()
  45. // p, err := utils.TripleDesDecrypt(encodedPwd, pubKey)
  46. // if err != nil {
  47. // return nil, errors.New("密码算法错误")
  48. // }
  49. // if password != p {
  50. // return nil, errors.New("账号或密码错误")
  51. // }
  52. // var userInfo request.UserInfo
  53. // userInfo.Id = record["Id"].Int32()
  54. // userInfo.UserName = record["UserName"].String()
  55. // userInfo.RealName = record["Realname"].String()
  56. // userInfo.Uuid = record["Uuid"].String()
  57. // userInfo.DeptId = record["DepartmentId"].String()
  58. // permissionService, err := permission.NewService(s.Tenant)
  59. // if err != nil {
  60. // return nil, errors.New("系统异常,请重新尝试")
  61. // }
  62. // userRoles, err := permissionService.GetRoleIdsByUser(userInfo.Id)
  63. // if err != nil {
  64. // return nil, err
  65. // }
  66. // userInfo.Roles = userRoles
  67. // dataByte, _ := json.Marshal(userInfo)
  68. // rsp := &auth.Response{}
  69. // err = authService.Call(ctx, "GetToken", &auth.Request{
  70. // Tenant: tenant,
  71. // UserKey: userInfo.UserName,
  72. // Uuid: userInfo.Uuid,
  73. // Data: string(dataByte),
  74. // }, rsp)
  75. // if err != nil {
  76. // return nil, err
  77. // }
  78. // jsonData, err := gjson.DecodeToJson(rsp.Data)
  79. // if err != nil {
  80. // return nil, err
  81. // }
  82. //
  83. // return jsonData, nil
  84. //}
  85. //
  86. //// LogOut 退出登录
  87. //func (s *sysUser) LogOut(ctx context.Context, token string) error {
  88. // glog.Info("Received Auth.RemoveToken request, token:", reqToken)
  89. // tokenResp := gfToken.RemoveToken(reqToken)
  90. // if err := gconv.Struct(tokenResp, rsp); err != nil {
  91. // return err
  92. // }
  93. // return nil
  94. //}
  95. func (s *UserService) GetUserList(req *model.SysUserSearchReq) (total int, userList []*model.SysUser, err error) {
  96. if req.PageSize == 0 {
  97. req.PageSize = comModel.PageSize
  98. }
  99. userModel := dao.SysUser.M
  100. if req.KeyWords != "" {
  101. keyWords := "%" + req.KeyWords + "%"
  102. userModel = userModel.Where("user_name like ? or nick_name like ?", keyWords, keyWords)
  103. }
  104. if len(req.DeptIds) != 0 {
  105. userModel = userModel.Where("dept_id in (?)", req.DeptIds)
  106. }
  107. if req.Status != "" {
  108. userModel = userModel.Where("status", gconv.Int(req.Status))
  109. }
  110. if req.Phone != "" {
  111. userModel = userModel.Where("phone like ?", "%"+req.Phone+"%")
  112. }
  113. if req.BeginTime != "" {
  114. userModel = userModel.Where("created_at >=?", req.BeginTime)
  115. }
  116. if req.EndTime != "" {
  117. userModel = userModel.Where("created_at <=?", req.EndTime)
  118. }
  119. total, err = userModel.Count()
  120. if err != nil {
  121. g.Log().Error(err)
  122. err = gerror.New("获取总行数失败")
  123. return
  124. }
  125. if req.PageNum == 0 {
  126. req.PageNum = 1
  127. }
  128. err = userModel.FieldsEx(dao.SysUser.Columns.Password, dao.SysUser.Columns.UserSalt).
  129. Page(req.PageNum, req.PageSize).Order("id asc").Scan(&userList)
  130. return
  131. }
  132. // GetAdminUserByUsernamePassword 后台登陆验证
  133. func (s *UserService) GetAdminUserByUsernamePassword(ctx context.Context, req *model.LoginParamsReq) (user *model.LoginUserRes, err error) {
  134. user, err = s.GetUserByUsernamePassword(ctx, req)
  135. if err != nil {
  136. return
  137. }
  138. //判断是否后台用户
  139. //if user.IsAdmin != 1 {
  140. // return nil, gerror.New("抱歉!您不属于后台管理员!")
  141. //}
  142. return
  143. }
  144. // GetUserByUsernamePassword 登陆验证
  145. func (s *UserService) GetUserByUsernamePassword(ctx context.Context, req *model.LoginParamsReq) (user *model.LoginUserRes, err error) {
  146. user, err = s.GetUserByUsername(ctx, req.Username)
  147. if err != nil {
  148. return
  149. }
  150. if user == nil {
  151. return nil, gerror.New("账号密码错误")
  152. }
  153. //验证密码
  154. if utils.EncryptPassword(req.Password, user.UserSalt) != user.UserPassword {
  155. return nil, gerror.New("账号密码错误")
  156. }
  157. //账号状态
  158. if user.UserStatus == "20" {
  159. return nil, gerror.New("账号已被冻结")
  160. }
  161. return
  162. }
  163. // GetUserByUsername 通过用户名获取用户信息
  164. func (s *UserService) GetUserByUsername(ctx context.Context, userName string) (user *model.LoginUserRes, err error) {
  165. return dao.SysUser.FindByUsername(ctx, userName)
  166. }
  167. // UpdateLoginInfo 更新用户登录信息 保存登录日志
  168. func (s *UserService) UpdateLoginInfo(id int, username, ip, userAgent, msg, module string) {
  169. status := 0 //登录状态 0失败 1成功
  170. if id != 0 {
  171. //说明登录成功更新登录信息
  172. status = 1
  173. //dao.SysUser.UpLoginInfo(id, ip)
  174. }
  175. //保存登录日志(异步)
  176. SysLoginLog.Invoke(&model.LoginLogParams{
  177. Status: status,
  178. Username: username,
  179. Ip: ip,
  180. UserAgent: userAgent,
  181. Msg: msg,
  182. Module: module,
  183. })
  184. }
  185. // LoginLog 记录登录日志
  186. func (s *UserService) LoginLog(params *model.LoginLogParams) {
  187. //ua := user_agent.New(params.UserAgent)
  188. //browser, _ := ua.Browser()
  189. //loginData := &model.SysLogin{
  190. // LoginName: params.Username,
  191. // Ipaddr: params.Ip,
  192. // LoginLocation: utils.GetCityByIp(params.Ip),
  193. // Browser: browser,
  194. // Os: ua.OS(),
  195. // Status: params.Status,
  196. // Msg: params.Msg,
  197. // LoginTime: gtime.Now(),
  198. // Module: params.Module,
  199. //}
  200. //dao.SysLoginLog.SaveLog(loginData)
  201. }
  202. // SaveOnline 保存用户登录在线状态信息
  203. //func (s *sysUser) SaveOnline(params *model.SysUserOnline) {
  204. // dao.SysUserOnline.SaveOnline(params)
  205. //}
  206. // GetAdminRole 获取用户角色
  207. func (s *UserService) GetAdminRole(userId int, allRoleList []*model.SysRole) (roles []*model.SysRole, err error) {
  208. var roleIds []uint
  209. roleIds, err = s.GetAdminRoleIds(userId)
  210. if err != nil {
  211. return
  212. }
  213. roles = make([]*model.SysRole, 0, len(allRoleList))
  214. for _, v := range allRoleList {
  215. for _, id := range roleIds {
  216. if int(id) == v.Id {
  217. roles = append(roles, v)
  218. }
  219. }
  220. if len(roles) == len(roleIds) {
  221. break
  222. }
  223. }
  224. return
  225. }
  226. // GetAdminRoleIds 获取用户角色ids
  227. func (s *UserService) GetAdminRoleIds(userId int) (roleIds []uint, err error) {
  228. enforcer, e := service.Casbin.GetEnforcer()
  229. if e != nil {
  230. err = e
  231. return
  232. }
  233. //查询关联角色规则
  234. groupPolicy := enforcer.GetFilteredGroupingPolicy(0, gconv.String(userId))
  235. if len(groupPolicy) > 0 {
  236. roleIds = make([]uint, len(groupPolicy))
  237. //得到角色id的切片
  238. for k, v := range groupPolicy {
  239. roleIds[k] = gconv.Uint(v[1])
  240. }
  241. }
  242. return
  243. }
  244. // AddUserPost 添加用户岗位信息
  245. func (s *UserService) AddUserPost(postIds []int, userId int64, tx *gdb.TX) (err error) {
  246. //删除旧岗位信息
  247. _, err = dao.SysUserPost.TX(tx).Where(dao.SysUserPost.Columns.UserId, userId).Delete()
  248. if err != nil {
  249. g.Log().Error(err)
  250. return
  251. }
  252. if len(postIds) == 0 {
  253. return
  254. }
  255. //添加用户岗位信息
  256. data := g.List{}
  257. for _, v := range postIds {
  258. data = append(data, g.Map{
  259. dao.SysUserPost.Columns.UserId: userId,
  260. dao.SysUserPost.Columns.PostId: v,
  261. })
  262. }
  263. _, err = dao.SysUserPost.TX(tx).Data(data).Insert()
  264. if err != nil {
  265. g.Log().Error(err)
  266. return
  267. }
  268. return
  269. }
  270. // GetUserInfoById 通过Id获取用户信息
  271. func (s *UserService) GetUserInfoById(id int, withPwd ...bool) (user *model.SysUser, err error) {
  272. if len(withPwd) > 0 && withPwd[0] {
  273. //用户用户信息
  274. err = dao.SysUser.Where(dao.SysUser.Columns.Id, id).Scan(&user)
  275. } else {
  276. //用户用户信息
  277. err = dao.SysUser.Where(dao.SysUser.Columns.Id, id).
  278. FieldsEx(dao.SysUser.Columns.Password, dao.SysUser.Columns.UserSalt).Scan(&user)
  279. }
  280. if err != nil {
  281. g.Log().Error(err)
  282. return nil, errors.New("获取用户数据失败")
  283. }
  284. return
  285. }
  286. // GetEditUser 获取要修改的用户信息
  287. func (s *UserService) GetEditUser(id int) (g.Map, error) {
  288. userData, err := s.GetUserInfoById(id)
  289. //获取角色信息
  290. roleList, err := SysRole.GetRoleList()
  291. if err != nil {
  292. g.Log().Error(err)
  293. return nil, errors.New("获取角色数据失败")
  294. }
  295. //获取已选择的角色信息
  296. checkedRoleIds, err := s.GetAdminRoleIds(id)
  297. if err != nil {
  298. g.Log().Error(err)
  299. return nil, errors.New("获取用户角色数据失败")
  300. }
  301. if checkedRoleIds == nil {
  302. checkedRoleIds = []uint{}
  303. }
  304. //获取岗位信息
  305. posts, err := s.GetUsedPost()
  306. if err != nil {
  307. return nil, err
  308. }
  309. checkedPosts, err := s.GetUserPostIds(id)
  310. if err != nil {
  311. return nil, err
  312. }
  313. if checkedPosts == nil {
  314. checkedPosts = []int{}
  315. }
  316. res := g.Map{
  317. "roleList": roleList,
  318. "userInfo": userData,
  319. "checkedRoleIds": checkedRoleIds,
  320. "posts": posts,
  321. "checkedPosts": checkedPosts,
  322. }
  323. return res, nil
  324. }
  325. // GetUsedPost 获取正常状态的岗位
  326. func (s *UserService) GetUsedPost() (list []*model.SysPost, err error) {
  327. err = dao.SysPost.Where(dao.SysPost.Columns.Status, 1).
  328. Order(dao.SysPost.Columns.Sort + " ASC, " + dao.SysPost.Columns.Id + " ASC ").Scan(&list)
  329. if err != nil {
  330. g.Log().Error(err)
  331. err = gerror.New("获取岗位数据失败")
  332. }
  333. return
  334. }
  335. // GetUserPostIds 获取用户岗位
  336. func (s *UserService) GetUserPostIds(userId int) (postIds []int, err error) {
  337. var list []*model.SysUserPost
  338. err = dao.SysUserPost.Where(dao.SysUserPost.Columns.UserId, userId).Scan(&list)
  339. if err != nil {
  340. g.Log().Error(err)
  341. return nil, gerror.New("获取用户岗位信息失败")
  342. }
  343. postIds = make([]int, 0)
  344. for _, entity := range list {
  345. postIds = append(postIds, int(entity.PostId))
  346. }
  347. return
  348. }
  349. // GetPostsByUserId 根据用户id获取岗位信息详情
  350. func (s *UserService) GetPostsByUserId(userId int) ([]*model.SysPost, error) {
  351. postIds, err := s.GetUserPostIds(userId)
  352. if err != nil {
  353. return nil, err
  354. }
  355. var posts []*model.SysPost
  356. err = dao.SysPost.Where(dao.SysPost.Columns.Id+" in (?)", postIds).Scan(&posts)
  357. return posts, err
  358. }
  359. func (s *UserService) AddUser(req *model.AddUserReq) (err error) {
  360. req.UserSalt = grand.S(10)
  361. req.Password = utils.EncryptPassword(req.Password, req.UserSalt)
  362. var tx *gdb.TX
  363. tx, err = g.DB().Begin()
  364. if err != nil {
  365. err = gerror.New("事务开启失败")
  366. return
  367. }
  368. Model := dao.SysUser.TX(tx)
  369. if i, _ := Model.Where("user_name=?", req.UserName).Count(); i != 0 {
  370. err = gerror.New("用户名已经存在")
  371. tx.Rollback()
  372. return
  373. }
  374. if i, _ := Model.Where("phone=?", req.Phone).Count(); i != 0 {
  375. err = gerror.New("手机号已经存在")
  376. tx.Rollback()
  377. return
  378. }
  379. userData := new(model.SysUser)
  380. //userData.UserName = req.UserName
  381. //userData.DeptId = req.DeptId
  382. //userData.Status = req.Status
  383. //userData.Phone = req.Phone
  384. //userData.Sex = req.Sex
  385. //userData.Email = req.Email
  386. //userData.NickName = req.NickName
  387. //userData.UserSalt = req.UserSalt
  388. //userData.Password = req.Password
  389. //userData.Remark = req.Remark
  390. err = gconv.Struct(req, userData)
  391. if err != nil {
  392. tx.Rollback()
  393. return
  394. }
  395. res, err := Model.Insert(userData)
  396. if err != nil {
  397. tx.Rollback()
  398. return
  399. }
  400. InsertId, _ := res.LastInsertId()
  401. fmt.Println(InsertId)
  402. //err = s.AddUserRole(req.RoleIds, InsertId)
  403. //if err != nil {
  404. // g.Log().Error(err)
  405. // err = gerror.New("设置用户权限失败")
  406. // tx.Rollback()
  407. // return
  408. //}
  409. //err = s.AddUserPost(req.PostIds, InsertId, tx)
  410. if err != nil {
  411. g.Log().Error(err)
  412. err = gerror.New("设置用户岗位信息失败")
  413. tx.Rollback()
  414. return
  415. }
  416. tx.Commit()
  417. return
  418. }
  419. // AddUserRole 添加用户角色信息
  420. func (s *UserService) AddUserRole(roleIds interface{}, userId int64) (err error) {
  421. enforcer, e := service.Casbin.GetEnforcer()
  422. if e != nil {
  423. err = e
  424. return
  425. }
  426. rule := gconv.Ints(roleIds)
  427. for _, v := range rule {
  428. _, err = enforcer.AddGroupingPolicy(fmt.Sprintf("%d", userId), fmt.Sprintf("%d", v))
  429. if err != nil {
  430. return
  431. }
  432. }
  433. return
  434. }
  435. // EditUser 修改用户
  436. func (s *UserService) EditUser(req *model.EditUserReq) (err error) {
  437. if i, _ := dao.SysUser.Where("id!=? and mobile=?", req.UserId, req.Phone).Count(); i != 0 {
  438. err = gerror.New("手机号已经存在")
  439. return
  440. }
  441. var tx *gdb.TX
  442. tx, err = g.DB().Begin()
  443. //保存管理员信息
  444. var userData *model.SysUser
  445. err = dao.SysUser.Where("id", req.UserId).Scan(&userData)
  446. if err != nil || userData == nil {
  447. g.Log().Error(err)
  448. err = gerror.New("获取用户信息失败")
  449. return
  450. }
  451. userData.DeptId = req.DeptId
  452. userData.Status = req.Status
  453. userData.Phone = req.Phone
  454. userData.Sex = req.Sex
  455. userData.Email = req.Email
  456. userData.NickName = req.NickName
  457. userData.Remark = req.Remark
  458. _, err = dao.SysUser.TX(tx).FieldsEx(dao.SysUser.Columns.Id, dao.SysUser.Columns.CreatedTime,
  459. dao.SysUser.Columns.DeletedTime, dao.SysUser.Columns.LoginDate).
  460. WherePri(userData.Id).Update(userData)
  461. if err != nil {
  462. g.Log().Error(err)
  463. err = gerror.New("修改用户信息失败")
  464. tx.Rollback()
  465. return
  466. }
  467. //设置用户所属角色信息
  468. err = s.EditUserRole(req.RoleIds, req.UserId)
  469. if err != nil {
  470. g.Log().Error(err)
  471. err = gerror.New("设置用户权限失败")
  472. tx.Rollback()
  473. return
  474. }
  475. //设置用户岗位数据
  476. err = s.AddUserPost(req.PostIds, int64(req.UserId), tx)
  477. if err != nil {
  478. g.Log().Error(err)
  479. err = gerror.New("设置用户岗位信息失败")
  480. tx.Rollback()
  481. return
  482. }
  483. tx.Commit()
  484. return
  485. }
  486. // EditUserRole 修改用户角色信息
  487. func (s *UserService) EditUserRole(roleIds interface{}, userId int) (err error) {
  488. enforcer, e := service.Casbin.GetEnforcer()
  489. if e != nil {
  490. err = e
  491. return
  492. }
  493. rule := gconv.Ints(roleIds)
  494. //删除用户旧角色信息
  495. enforcer.RemoveFilteredGroupingPolicy(0, fmt.Sprintf("%d", userId))
  496. for _, v := range rule {
  497. _, err = enforcer.AddGroupingPolicy(fmt.Sprintf("%d", userId), fmt.Sprintf("%d", v))
  498. if err != nil {
  499. return
  500. }
  501. }
  502. return
  503. }
  504. // ResetUserPwd 重置用户密码
  505. func (s *UserService) ResetUserPwd(req *model.SysUserResetPwdReq) error {
  506. salt := grand.S(10)
  507. password := utils.EncryptPassword(req.Password, salt)
  508. _, err := dao.SysUser.WherePri(req.Id).Update(g.Map{
  509. dao.SysUser.Columns.UserSalt: salt,
  510. dao.SysUser.Columns.Password: password,
  511. })
  512. return err
  513. }
  514. func (s *UserService) ChangeUserStatus(req *model.SysUserStatusReq) error {
  515. _, err := dao.SysUser.WherePri(req.Id).Update(g.Map{
  516. dao.SysUser.Columns.Status: req.UserStatus,
  517. })
  518. return err
  519. }
  520. // DeleteUserByIds 删除用户信息
  521. func (s *UserService) DeleteUserByIds(ctx context.Context, ids []int64) error {
  522. return g.DB().Transaction(ctx, func(ctx context.Context, tx *gdb.TX) error {
  523. _, err := s.Dao.Ctx(ctx).TX(tx).Where(dao.SysUser.Columns.Id+" in(?)", ids).Delete()
  524. //删除对应权限
  525. enforcer, err := service.Casbin.GetEnforcer()
  526. if err == nil {
  527. for _, v := range ids {
  528. enforcer.RemoveFilteredGroupingPolicy(0, fmt.Sprintf("%d", v))
  529. }
  530. }
  531. //删除用户对应的岗位
  532. _, err = dao.SysUserPost.Ctx(ctx).TX(tx).Delete(dao.SysUserPost.Columns.UserId+" in (?)", ids)
  533. return err
  534. })
  535. }
  536. // SetAvatar 修改用户头像
  537. func (s *UserService) SetAvatar(userId int, avatarUrl string) error {
  538. _, err := dao.SysUser.WherePri(userId).Unscoped().Update(g.Map{
  539. dao.SysUser.Columns.Avatar: avatarUrl,
  540. })
  541. return err
  542. }
  543. // ProfileEdit 修改个人资料
  544. func (s *UserService) ProfileEdit(req *model.ProfileUpReq) error {
  545. _, err := dao.SysUser.WherePri(req.UserId).Unscoped().Update(req)
  546. return err
  547. }
  548. // ProfileUpdatePwd 修改个人密码
  549. func (s *UserService) ProfileUpdatePwd(req *model.ProfileUpdatePwdReq) error {
  550. userInfo, err := s.GetUserInfoById(req.UserId, true)
  551. if err != nil {
  552. return err
  553. }
  554. oldPassword := utils.EncryptPassword(req.OldPassword, userInfo.UserSalt)
  555. if oldPassword != userInfo.Password {
  556. return errors.New("原始密码错误!")
  557. }
  558. salt := grand.S(10)
  559. newPassword := utils.EncryptPassword(req.NewPassword, salt)
  560. _, err = dao.SysUser.WherePri(req.UserId).Unscoped().Update(g.Map{
  561. dao.SysUser.Columns.UserSalt: salt,
  562. dao.SysUser.Columns.Password: newPassword,
  563. })
  564. return err
  565. }
  566. // GetDataWhere 获取数据权限判断条件
  567. //func (s *sysUser) GetDataWhere(userInfo *dao.CtxUser, entity interface{}) (where g.Map, err error) {
  568. // whereJustMe := g.Map{} //本人数据权限
  569. // t := reflect.TypeOf(entity)
  570. // for i := 0; i < t.Elem().NumField(); i++ {
  571. // if t.Elem().Field(i).Name == "CreatedBy" {
  572. // //若存在用户id的字段,则生成判断数据权限的条件
  573. // //1、获取当前用户所属角色
  574. // allRoles := ([]*model.SysRole)(nil)
  575. // allRoles, err = SysRole.GetRoleList()
  576. // if err != nil {
  577. // return nil, err
  578. // }
  579. // roles := ([]*model.SysRole)(nil)
  580. // roles, err = s.GetAdminRole(userInfo.Id, allRoles)
  581. // if err != nil {
  582. // return nil, err
  583. // }
  584. // //2获取角色对应数据权限
  585. // deptIdArr := gset.New()
  586. // for _, role := range roles {
  587. // switch role.DataScope {
  588. // case 1: //全部数据权限
  589. // return
  590. // case 2: //自定数据权限
  591. // var deptIds []int
  592. // deptIds, err = Dept.GetRoleDepts(gconv.int(role.Id))
  593. // if err != nil {
  594. // return
  595. // }
  596. // deptIdArr.Add(gconv.Interfaces(deptIds)...)
  597. // case 3: //本部门数据权限
  598. // deptIdArr.Add(gconv.int(userInfo.DeptId))
  599. // case 4: //本部门及以下数据权限
  600. // deptIdArr.Add(gconv.int(userInfo.DeptId))
  601. // //获取正常状态部门数据
  602. // depts := ([]*model.SysDept)(nil)
  603. // depts, err = Dept.GetList(&dao.SysDeptSearchParams{Status: "1"})
  604. // if err != nil {
  605. // return
  606. // }
  607. // var dList g.List
  608. // for _, d := range depts {
  609. // m := g.Map{
  610. // "id": d.DeptId,
  611. // "pid": d.ParentId,
  612. // "label": d.DeptName,
  613. // }
  614. // dList = append(dList, m)
  615. // }
  616. // l := library.FindSonByParentId(dList, gconv.Int(userInfo.DeptId), "pid", "id")
  617. // for _, li := range l {
  618. // deptIdArr.Add(gconv.int(li["id"]))
  619. // }
  620. // case 5: //仅本人数据权限
  621. // whereJustMe = g.Map{"user.id": userInfo.Id}
  622. // }
  623. // }
  624. // if deptIdArr.Size() > 0 {
  625. // where = g.Map{"user.dept_id": deptIdArr.Slice()}
  626. // } else if len(whereJustMe) > 0 {
  627. // where = whereJustMe
  628. // }
  629. // }
  630. // }
  631. // return
  632. //}
  633. // GetUsers 通过用户ids查询多个用户信息
  634. func (s *UserService) GetUsers(ids []int) (users []*model.SysUserRes, err error) {
  635. if len(ids) == 0 {
  636. return
  637. }
  638. idsSet := gset.NewIntSetFrom(ids).Slice()
  639. err = dao.SysUser.Where(dao.SysUser.Columns.Id+" in(?)", idsSet).Fields(model.SysUserRes{}).
  640. Order(dao.SysUser.Columns.Id + " ASC").Scan(&users)
  641. return
  642. }