Login.php 4.8 KB

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