Login.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. <?php namespace Manage\Api;
  2. use Dever;
  3. use Dever\Helper\Str;
  4. use Dever\Helper\Code;
  5. use Manage\Lib\Util;
  6. class Login
  7. {
  8. # 获取系统信息
  9. public function getSystem()
  10. {
  11. $system = Dever::input('system', 'is_string', '系统', 'platform');
  12. $system = Dever::db('manage/system')->find(['key' => $system]);
  13. if (!$system) {
  14. Dever::error('当前系统不存在');
  15. }
  16. $system['placeholder'] = '请输入' . $system['name'] . '号';
  17. return $system;
  18. }
  19. # 登录
  20. public function act()
  21. {
  22. //$this->checkCode();
  23. $system = $this->getSystem();
  24. $number = Dever::input('number', '', $system['name'] . '号', 'default');
  25. $info = Dever::db($system['info_table'])->find(['number' => $number]);
  26. if (!$info) {
  27. Dever::error('登录失败,当前' . $system['name'] . '号错误');
  28. }
  29. if ($system['partition'] == 'no') {
  30. # 不分库
  31. $db = Dever::db($system['user_table']);
  32. $role_db = Dever::db($system['role_table']);
  33. } else {
  34. # 分库
  35. $info['info_id'] = $info['id'];
  36. $info['partition'] = $system['partition'];
  37. $info['system_key'] = $system['key'];
  38. $info['system_id'] = $system['id'];
  39. $partition = Dever::load(Util::class)->system($info);
  40. $db = Dever::db($system['user_table'], '', true, 'default', $partition);
  41. $role_db = Dever::db($system['role_table'], '', true, 'default', $partition);
  42. }
  43. $where['mobile'] = Dever::input('mobile', Dever::rule('mobile'), '手机号');
  44. $password = Dever::input('password', 'is_string', '密码');
  45. $admin = $db->find($where);
  46. if (!$admin) {
  47. $total = $db->find(1);
  48. if (!$total) {
  49. $insert['name'] = Str::hide($where['mobile']);
  50. $insert['mobile'] = $where['mobile'];
  51. $insert['role'] = 1;
  52. $insert += Dever::load(Util::class)->createPwd($password);
  53. $id = $db->insert($insert);
  54. $admin = $db->find($id);
  55. } else {
  56. Dever::error('登录失败');
  57. }
  58. }
  59. if (!$admin) {
  60. Dever::error('登录失败,管理员信息无效');
  61. }
  62. if ($admin['status'] == 2) {
  63. Dever::error('登录失败,账户已被封禁');
  64. }
  65. if (Dever::load(Util::class)->hash($password, $admin['salt']) != $admin['password']) {
  66. Dever::error('登录失败,账户密码无效');
  67. }
  68. # 根据角色获取module_id
  69. $system_user = Dever::db('manage/system_user')->find(['uid' => $admin['id'], 'system_id' => $system['id'], 'info_id' => $info['id']]);
  70. $module_id = $data_id = 0;
  71. if ($system_user) {
  72. $module_id = $system_user['module_id'];
  73. $data_id = $system_user['data_id'];
  74. } elseif ($admin['role']) {
  75. $module = '';
  76. $role = $role_db->select(array('id' => ['in', $admin['role']]));
  77. foreach ($role as $k => $v) {
  78. if ($v['module']) {
  79. $module .= $v['module'] . ',';
  80. }
  81. }
  82. if ($module) {
  83. $where['id'] = ['in', $module];
  84. } else {
  85. $where['system'] = $system['key'];
  86. }
  87. $module = Dever::db('manage/system_module')->select($where);
  88. if ($module) {
  89. $module_id = $module[0]['id'];
  90. $child = Dever::db($module[0]['data_table'])->select([]);
  91. if ($child) {
  92. if ($admin['module_data']) {
  93. foreach ($child as $k => $v) {
  94. $key = $module_id . '-' . $v['id'];
  95. if (strstr($admin['module_data'], $key)) {
  96. $data_id = $v['id'];
  97. break;
  98. }
  99. }
  100. } else {
  101. $data_id = $child[0]['id'];
  102. }
  103. }
  104. }
  105. }
  106. if (!$module_id || !$data_id) {
  107. Dever::error('登录失败,账户无效');
  108. }
  109. return Dever::load(Util::class)->token($admin['id'], $admin['mobile'], $system['partition'], $system['key'], $system['id'], $info['id'], $module_id, $data_id);
  110. }
  111. private function checkCode()
  112. {
  113. $code = Dever::input('verificationCode');
  114. if (!$code) {
  115. Dever::error('请输入验证码');
  116. }
  117. $save = Dever::session('code');
  118. if ($code != $save) {
  119. Dever::error('验证码错误');
  120. }
  121. }
  122. public function code()
  123. {
  124. echo Dever::session('code', Code::create(), 3600);die;
  125. }
  126. public function out()
  127. {
  128. return 'ok';
  129. }
  130. public function loadMenu()
  131. {
  132. return Dever::load(\Manage\Lib\Menu::class)->init();
  133. }
  134. }