SysUser.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. <?php
  2. namespace app\common\model;
  3. // 引入框架内置类
  4. use think\Model;
  5. use think\facade\Db;
  6. use think\facade\Request;
  7. use think\facade\Event;
  8. use app\common\model\SysLoginFail;
  9. use app\common\model\SysLogin;
  10. use app\common\model\SysRole;
  11. use think\facade\Session;
  12. class SysUser extends Model
  13. {
  14. protected $pk = 'userid';
  15. public static function queryList($roleid)
  16. {
  17. if ($roleid == 1) {
  18. return Db::table('phome_sys_user')->alias('u')
  19. ->join('phome_sys_role r', 'u.roleid = r.roleid')
  20. ->field('u.userid,u.username,u.nickname,u.truename,u.email,u.status,u.per_time,u.per_ip,u.login_num,u.create_time,r.name as rolename')
  21. ->select();
  22. } else {
  23. return Db::table('phome_sys_user')->alias('u')
  24. ->join('phome_sys_role r', 'u.roleid = r.roleid')
  25. ->where('u.roleid', '<>', 1)
  26. ->field('u.userid,u.username,u.nickname,u.truename,u.email,u.status,u.per_time,u.per_ip,u.login_num,u.create_time,r.name as rolename')
  27. ->select();
  28. }
  29. }
  30. public function getUsernames($role_id = null)
  31. {
  32. if ($role_id == null) {
  33. return $this->column('id, username');
  34. } else {
  35. $data = $this->where('role_id', $role_id)->column('username');
  36. if ($data) {
  37. return implode(',', $data);
  38. } else {
  39. return null;
  40. }
  41. }
  42. }
  43. public static function checkLogin()
  44. {
  45. $ip = Request::ip();
  46. $time = time();
  47. $datetime = date('Y-m-d H:i:s', $time);
  48. if (!SysLoginFail::checkIp($ip, $time)) {
  49. return json(['code' => 1, 'msg' => '登录次数超过10次, 请等1小时后再试']);
  50. }
  51. $username = Request::param("username", '', 'strip_tags');
  52. $password = Request::param("password", '', 'strip_tags');
  53. if (!$username || !$password) {
  54. return json(['code' => 1, 'msg' => '用户名/密码/验证码不能为空']);
  55. }
  56. if (false === Request::checkToken('__token__')) {
  57. return json(['error' => 1, 'msg' => '验证有误']);
  58. }
  59. $info = self::where('username', $username)->find();
  60. if (!$info) {
  61. SysLoginFail::saveFail($ip, $time);
  62. return json(['code' => 2, 'msg' => '用户名/密码不正确']);
  63. }
  64. if (md5($password . $info->salt) != $info->password) {
  65. // 记录失败
  66. SysLoginFail::saveFail($ip, $time);
  67. SysLogin::record($info->userid, $info->username, $datetime, $ip, 1);
  68. return json(['code' => 2, 'msg' => '用户名/密码不正确']);
  69. }
  70. if ($info->status == 1) {
  71. // 更新登录IP,登录时间和更新次数
  72. $perTime = $info->per_time;
  73. $perIp = $info->per_ip;
  74. $info->per_time = date('Y-m-d H:i:s', $time);
  75. $info->per_ip = $ip;
  76. $info->login_num += 1;
  77. $info->save();
  78. Session::set('adminuser', [
  79. 'userid' => $info->userid,
  80. 'username' => $info->username,
  81. 'perTime' => $perTime,
  82. 'perIp' => $perIp,
  83. 'nickname' => $info->nickname,
  84. 'avatar' => $info->avatar,
  85. 'loginNum' => $info->loginNum,
  86. 'roleid' => $info->roleid
  87. ]);
  88. // 记录登录
  89. SysLogin::record($info->userid, $info->username, $datetime, $ip);
  90. return json(['code' => 0, 'msg' => '登录成功']);
  91. } else {
  92. // 记录失败
  93. SysLogin::record($info->userid, $info->username, $datetime, $ip, 1);
  94. return json(['code' => 2, 'msg' => '用户已被禁用!']);
  95. }
  96. }
  97. }