SysUser.php 3.7 KB

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