StoreAdminLogin.php 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. <?php
  2. /**
  3. * 重庆赤晓店信息科技有限公司
  4. * https://www.chixiaodian.com
  5. * Copyright (c) 2023 赤店商城 All rights reserved.
  6. */
  7. namespace app\modules\client\behaviors;
  8. use app\models\Admin;
  9. use app\models\MchStaff;
  10. use app\models\SaasUser;
  11. use app\models\Store;
  12. use app\models\User;
  13. use yii\base\ActionFilter;
  14. use yii\helpers\Json;
  15. use yii\web\Response;
  16. class StoreAdminLogin extends ActionFilter
  17. {
  18. const EVENT_AFTER_LOGIN_ACTION = 'afterLoginAction';
  19. // 接口白名单
  20. public static $allow_list = [
  21. 'client/v1/store-admin/login',
  22. 'client/v1/store-admin/get-express',
  23. ];
  24. public function beforeAction($action)
  25. {
  26. $select = 0;
  27. if($this->isMch($action, $select)){
  28. return $this->mchAdmin($select);
  29. }
  30. // $access_token = input_params('access_token');
  31. // $saas_user = SaasUser::find()->where(['access_token' => $access_token])->select('id, mobile')->asArray()->one();
  32. // if (empty($saas_user['mobile'])) {
  33. // \Yii::$app->response->data = Json::encode([
  34. // 'code' => 1,
  35. // 'msg' => '获取不到用户信息。'
  36. // ]);
  37. // return false;
  38. // }
  39. $access_token = input_params('access_token');
  40. $saas_user = SaasUser::findIdentityByAccessToken($access_token);
  41. if (empty($access_token) && $saas_user) {
  42. \Yii::$app->response->format = Response::FORMAT_JSON;
  43. \Yii::$app->response->data = [
  44. 'code' => 401,
  45. 'msg' => '登陆失败'
  46. ];
  47. return false;
  48. }
  49. if (!$saas_user) {
  50. \Yii::$app->response->format = Response::FORMAT_JSON;
  51. \Yii::$app->response->data = [
  52. 'code' => 401,
  53. 'msg' => '登陆失败'
  54. ];
  55. return false;
  56. }
  57. $params_r = $_REQUEST['r'];
  58. if (in_array($params_r, self::$allow_list)) {
  59. return true;
  60. }
  61. try {
  62. $payload = \Yii::$app->jwt->getPayload();
  63. } catch (\Exception $e) {
  64. \Yii::$app->response->format = Response::FORMAT_JSON;
  65. \Yii::$app->response->data = [
  66. 'code' => 0,
  67. 'msg' => $e->getMessage(),
  68. 'status' => 401
  69. ];
  70. return false;
  71. }
  72. $store_admin_id = $payload['store_admin_id'];
  73. if ($store_admin_id) {
  74. $StoreMiniAdmin = \app\models\StoreAdmin::findOne(['id' => $store_admin_id, 'status' => 1, 'is_delete' => 0, 'store_id' => get_store_id()]);
  75. } else {
  76. if (!empty($payload['admin_id'])) {
  77. $StoreMiniAdmin = \app\models\Admin::findOne(['id' => $payload['admin_id'], 'is_delete' => 0]);
  78. }
  79. }
  80. if (empty($StoreMiniAdmin)) {
  81. \Yii::$app->response->format = Response::FORMAT_JSON;
  82. \Yii::$app->response->data = [
  83. 'code' => 1,
  84. 'msg' => '您不是该商城管理员。'
  85. ];
  86. return false;
  87. }
  88. // $User = User::find()->where(['binding' => $saas_user['mobile'], 'is_delete' => 0, 'store_id' => get_store_id()])->select('id, is_admin')->one();
  89. // if ((int)$User->is_admin === 0) {
  90. // \Yii::$app->response->data = Json::encode([
  91. // 'code' => 1,
  92. // 'msg' => '您不是该商城管理员。' . get_user()->is_admin
  93. // ]);
  94. // return false;
  95. // }
  96. $store = Store::findOne(get_store_id());
  97. if ($store->end_time < time() && !empty((float)$store->open_price) && !empty((float)$store->renew_price)) {
  98. \Yii::$app->response->format = Response::FORMAT_JSON;
  99. \Yii::$app->response->data = [
  100. 'code' => 1,
  101. 'msg' => '商城已过期,请及时联系管理员进行续费。'
  102. ];
  103. return false;
  104. }
  105. return true;
  106. }
  107. public function isMch($action, &$select = 0) {
  108. // $_GET['is_mch'] = 1;
  109. $key = implode('_', ['store-admin', 'isMch', get_store_id(), get_user_id()]);
  110. $keySelect = implode('_', ['store-admin', 'mch-select', get_store_id(), get_user_id()]);
  111. $is_mch = (int)input_params('is_mch');
  112. $mch_select = (int)input_params('mch_select');
  113. if($action->id == 'store-info'){
  114. cache()->set($key, $is_mch);
  115. cache()->set($keySelect, $mch_select);
  116. }
  117. if(!$is_mch){
  118. $is_mch = (int)cache()->get($key);
  119. }
  120. if($is_mch){
  121. $mch_select = (int)cache()->get($keySelect);
  122. }
  123. $select = $mch_select;
  124. return $is_mch;
  125. }
  126. public function mchAdmin($select = 0) {
  127. $user_id = get_user_id();
  128. $mch = \app\models\Mch::find()->where(['user_id' => $user_id, 'store_id' => get_store_id(), 'is_delete' => 0])->indexBy('id')->all();
  129. // 这里要判断用户是不是入住商的员工
  130. $staff = MchStaff::find()->where(['is_delete' => 0, 'user_id' => $user_id, 'store_id' => get_store_id()])->select(['mch_id'])->column();
  131. if($staff){
  132. $mchStaff = \app\models\Mch::find()->where(['is_delete' => 0,'store_id' => get_store_id(),'id' => $staff])->indexBy('id')->all();
  133. $mch = array_merge($mch,$mchStaff);
  134. }
  135. if(!$mch){
  136. \Yii::$app->response->format = Response::FORMAT_JSON;
  137. \Yii::$app->response->data = [
  138. 'code' => 5,
  139. 'msg' => '您不是入驻商管理员。',
  140. ];
  141. return false;
  142. }
  143. if(count($mch) > 1 && !$select){
  144. \Yii::$app->response->format = Response::FORMAT_JSON;
  145. \Yii::$app->response->data = [
  146. 'code' => 2,
  147. 'msg' => '请选择店铺。',
  148. 'data' => $mch,
  149. ];
  150. return false;
  151. }
  152. $this->owner->mch = $select ? ($mch[$select] ?? array_shift($mch)) : array_shift($mch);
  153. return true;
  154. }
  155. }