User.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. <?php
  2. namespace app\service\admin;
  3. use laytp\library\Token;
  4. use laytp\traits\Error;
  5. /**
  6. * 后台用户服务实现者
  7. * @package app\service\admin
  8. */
  9. class User
  10. {
  11. use Error;
  12. protected $_user = null;//实例化的用户对象
  13. protected $_token = null;//用户登录凭证,token
  14. protected $_isLogin = null;//当前用户是否登录
  15. protected $userModel = null;//用户数据模型
  16. protected $allowFields = ['id', 'username', 'nickname', 'avatar', 'is_super_manager', 'status', 'create_time'];
  17. protected $tokenKeepTime = 365 * 24 * 60 * 60;//Token默认有效时长,单位秒,365天
  18. /**
  19. * 初始化
  20. * @param $token
  21. * @return bool
  22. */
  23. public function init($token)
  24. {
  25. if (!$token) {
  26. $this->setError('token不能为空,请重新登录');
  27. return false;
  28. }
  29. $data = Token::get($token);
  30. if (!$data) {
  31. $this->setError('token无效,请重新登录');
  32. return false;
  33. }
  34. $userId = intval($data['user_id']);
  35. if ($userId > 0) {
  36. $user = \app\model\admin\User::with(['avatar_file'])->findOrEmpty($userId);
  37. if (!$user) {
  38. $this->setError('账号不存在,请重新登录');
  39. return false;
  40. }
  41. //用户状态 1正常 2禁用
  42. if ($user['status'] != 1) {
  43. $this->setError('账号被禁用,请联系管理员');
  44. return false;
  45. }
  46. $this->_user = $user;
  47. $this->_isLogin = true;
  48. $this->_token = $token;
  49. return true;
  50. } else {
  51. $this->setError('账号不存在,请重新登录');
  52. return false;
  53. }
  54. }
  55. /**
  56. * 退出登录
  57. * @return bool
  58. */
  59. public function logout()
  60. {
  61. if (!$this->_isLogin) {
  62. $this->setError('你没有登录');
  63. return false;
  64. }
  65. //设置登录标识
  66. $this->_isLogin = false;
  67. //删除Token
  68. Token::delete($this->_token);
  69. return true;
  70. }
  71. /**
  72. * 获取登录用户信息
  73. */
  74. public function getUserInfo()
  75. {
  76. $data = $this->_user->toArray();
  77. $allowFields = $this->getAllowFields();
  78. $userInfo = array_intersect_key($data, array_flip($allowFields));
  79. $userInfo['avatar_file'] = $data['avatar_file'];
  80. $userInfo = array_merge($userInfo, ['token' => $this->_token]);
  81. return $userInfo;
  82. }
  83. /**
  84. * 获取允许输出的字段
  85. * @return array
  86. */
  87. public function getAllowFields()
  88. {
  89. return $this->allowFields;
  90. }
  91. /**
  92. * 获取User模型
  93. * @return User
  94. */
  95. public function getUser()
  96. {
  97. return $this->_user;
  98. }
  99. /**
  100. * 判断是否登录
  101. * @return boolean
  102. */
  103. public function isLogin()
  104. {
  105. if ($this->_isLogin) {
  106. return true;
  107. }
  108. return false;
  109. }
  110. /**
  111. * 获取当前Token
  112. * @return string
  113. */
  114. public function getToken()
  115. {
  116. return $this->_token;
  117. }
  118. }