SysUser.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  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. protected $schema = [
  13. "id" => "int",
  14. "cid" => "int",
  15. "title" => "varchar",
  16. "writer" => "varchar",
  17. "source" => "varchar",
  18. "titlepic" => "varchar",
  19. "keywords" => "varchar",
  20. "summary" => "varchar",
  21. "content" => "varchar",
  22. "discussed" => "int",
  23. "status" => "int",
  24. "top" => "int",
  25. "sort" => "int",
  26. "hits" => "int",
  27. "likes" => "int",
  28. "content_type"=> "int",
  29. "userid" => "int",
  30. "userid" => "int",
  31. "username" => "varchar",
  32. "create_time" => "int",
  33. "userid" => "int",
  34. "roleid" => "int",
  35. "username" => "varchar",
  36. "password" => "varchar",
  37. "salt" => "varchar",
  38. "nickname" => "varchar",
  39. "truename" => "varchar",
  40. "email" => "varchar",
  41. "avatar" => "varchar",
  42. "remark" => "varchar",
  43. "status" => "int",
  44. "per_time" => "datetime",
  45. "per_ip" => "int",
  46. "login_num" => "int",
  47. "create_time"=> "int",
  48. "update_time" => "int"
  49. ];
  50. public function sysRole()
  51. {
  52. return $this->belongsTo('SysRole', 'roleid')->bind(['rolename' => 'name']);
  53. }
  54. public static function queryList()
  55. {
  56. return self::field('userid,roleid,username,nickname,truename,email,status,per_time,per_ip,login_num,create_time')->with('sysRole')->select();
  57. }
  58. public function getUsernames($role_id = null)
  59. {
  60. if ($role_id == null) {
  61. return $this->column('id, username');
  62. } else {
  63. $data = $this->where('role_id', $role_id)->column('username');
  64. if ($data) {
  65. return implode(',', $data);
  66. } else {
  67. return null;
  68. }
  69. }
  70. }
  71. // 状态修改 1,正常; 2,非正常
  72. public static function state(int $id)
  73. {
  74. try {
  75. $info = self::find($id);
  76. $info->status = -1 - $info['status'];
  77. $info->save();
  78. return json(['code' => 0, 'msg' => '修改成功!', 'status'=>$info->status]);
  79. } catch (\Exception $e) {
  80. return json(['code' => 1, 'msg' => $e->getMessage()]);
  81. }
  82. }
  83. public static function checkLogin()
  84. {
  85. $ip = Request::ip();
  86. $time = time();
  87. $datetime = date('Y-m-d H:i:s', $time);
  88. if (!SysLoginFail::checkIp($ip, $time)) {
  89. return json(['code' => 1, 'msg' => '登录次数超过10次, 请等1小时后再试']);
  90. }
  91. $username = Request::param("username", '', 'strip_tags');
  92. $password = Request::param("password", '', 'strip_tags');
  93. if (!$username || !$password) {
  94. return json(['code' => 1, 'msg' => '用户名/密码/验证码不能为空']);
  95. }
  96. if (false === Request::checkToken('__token__')) {
  97. return json(['error' => 1, 'msg' => '验证有误']);
  98. }
  99. $info = self::where('username', $username)->find();
  100. if (!$info) {
  101. SysLoginFail::saveFail($ip, $time);
  102. return json(['code' => 2, 'msg' => '用户名/密码不正确1']);
  103. }
  104. if (md5($password . $info->salt) != $info->password) {
  105. // 记录失败
  106. SysLoginFail::saveFail($ip, $time);
  107. SysLogin::record($info->userid, $info->username, $datetime, $ip, 1);
  108. return json(['code' => 2, 'msg' => '用户名/密码不正确']);
  109. }
  110. if ($info->status === 0) {
  111. // 更新登录IP,登录时间和更新次数
  112. $perTime = $info->per_time;
  113. $perIp = $info->per_ip;
  114. $info->per_time = date('Y-m-d H:i:s', $time);
  115. $info->per_ip = $ip;
  116. $info->login_num += 1;
  117. $info->save();
  118. Session::set('adminuser', [
  119. 'userid' => $info->userid,
  120. 'username' => $info->username,
  121. 'perTime' => $perTime,
  122. 'perIp' => $perIp,
  123. 'nickname' => $info->nickname,
  124. 'avatar' => $info->avatar,
  125. 'loginNum' => $info->loginNum,
  126. 'roleid' => $info->roleid
  127. ]);
  128. // 记录登录
  129. SysLogin::record($info->userid, $info->username, $datetime, $ip);
  130. return json(['code' => 0, 'msg' => '登录成功']);
  131. } else {
  132. // 记录失败
  133. SysLogin::record($info->userid, $info->username, $datetime, $ip, 1);
  134. return json(['code' => 2, 'msg' => '用户已被禁用!']);
  135. }
  136. }
  137. }