Просмотр исходного кода

feat: EK-856: 管理员增加“Country”属性.

kevinElken 9 месяцев назад
Родитель
Сommit
b7633dc212

+ 26 - 13
backendApi/modules/v1/controllers/AdminController.php

@@ -54,11 +54,23 @@ class AdminController extends BaseController
             'UPDATE_ADMIN_NAME' => 'ADMU.ADMIN_NAME',
         ]);
 
-        $adminId = Yii::$app->getUser()->getUserInfo()['id'];
-        $adminCountry = AdminCountry::getCountry($adminId);
-        $quotedAdminCountry = array_map(function($item) {
-            return "'" . addslashes($item) . "'";
-        }, $adminCountry);
+        $join = [
+            ['LEFT JOIN', AdminRole::tableName().' AS AR', 'A.ROLE_ID=AR.ID'],
+            ['LEFT JOIN', Admin::tableName() . ' AS ADMC', 'ADMC.ID=A.CREATE_ADMIN'],
+            ['LEFT JOIN', Admin::tableName() . ' AS ADMU', 'ADMU.ID=A.UPDATE_ADMIN'],
+        ];
+
+        $isSuper = AdminRole::isSuperAdmin(\Yii::$app->getUser()->getUserInfo()['roleId']);
+        if (!$isSuper) {
+            $adminId = Yii::$app->getUser()->getUserInfo()['id'];
+            $adminCountry = AdminCountry::getCountry($adminId);
+            $quotedAdminCountry = array_map(function($item) {
+                return "'" . addslashes($item) . "'";
+            }, $adminCountry);
+
+            $join[] = ['INNER JOIN', AdminCountry::tableName() . ' AS AC', "AC.COUNTRY_ID IN (" . implode(',', $quotedAdminCountry) . ") AND AC.ADMIN_ID=A.ID"];
+        }
+
 
         $condition = $filter['condition'];
         $condition .= ' AND A.IS_DEL=0';
@@ -66,18 +78,19 @@ class AdminController extends BaseController
         $data = Admin::lists($condition, $params, [
             'select' => 'A.*,AR.ROLE_NAME,ADMC.ADMIN_NAME CREATE_ADMIN_NAME,ADMU.ADMIN_NAME UPDATE_ADMIN_NAME',
             'from' => Admin::tableName().' AS A',
-            'join' => [
-                ['LEFT JOIN', AdminRole::tableName().' AS AR', 'A.ROLE_ID=AR.ID'],
-                ['LEFT JOIN', Admin::tableName() . ' AS ADMC', 'ADMC.ID=A.CREATE_ADMIN'],
-                ['LEFT JOIN', Admin::tableName() . ' AS ADMU', 'ADMU.ID=A.UPDATE_ADMIN'],
-                ['INNER JOIN', AdminCountry::tableName() . ' AS AC', "AC.COUNTRY_ID IN (" . implode(',', $quotedAdminCountry) . ") AND AC.ADMIN_ID=A.ID"],
-
-            ],
+            'join' => $join,
             'orderBy' => 'A.CREATED_AT ASC',
         ]);
 
         foreach ($data['list'] as &$admin) {
-            $admin['countryId'] = AdminCountry::getCountry($admin['ID']);
+            if ($isSuper) {
+                $admin['countryId'] = [];
+                $admin['countryName'] = '';
+            } else {
+                $admin['countryId'] = AdminCountry::getCountry($admin['ID']);
+                $countryName = Countries::find()->select('COUNTRY_NAME')->where(['in', 'ID', $admin['countryId']])->column();
+                $admin['countryName'] = implode(',', $countryName);
+            }
         }
 
         return static::notice($data);

+ 15 - 12
backendApi/modules/v1/models/AdminForm.php

@@ -176,12 +176,13 @@ class AdminForm extends Model
                 'remark' => $this->remark,
             ]);
 
-            // 国家
-            foreach ($this->countryId as $country) {
-                $adminCountry = new AdminCountry();
-                $adminCountry->ADMIN_ID = $model->ID;
-                $adminCountry->COUNTRY_ID = $country;
-                $adminCountry->save();
+            if (!AdminRole::isSuperAdmin($this->roleId)) {
+                foreach ($this->countryId as $country) {
+                    $adminCountry = new AdminCountry();
+                    $adminCountry->ADMIN_ID = $model->ID;
+                    $adminCountry->COUNTRY_ID = $country;
+                    $adminCountry->save();
+                }
             }
         } elseif($this->scenario == 'edit') {
             $this->adminOperateLogger->afterUpdate($model);
@@ -192,12 +193,14 @@ class AdminForm extends Model
             ]);
 
             (new AdminCountry())->deleteAll(['ADMIN_ID' => $model->ID]);
-            // 国家
-            foreach ($this->countryId as $country) {
-                $adminCountry = new AdminCountry();
-                $adminCountry->ADMIN_ID = $model->ID;
-                $adminCountry->COUNTRY_ID = $country;
-                $adminCountry->save();
+            if (!AdminRole::isSuperAdmin($this->roleId)) {
+                // 国家
+                foreach ($this->countryId as $country) {
+                    $adminCountry = new AdminCountry();
+                    $adminCountry->ADMIN_ID = $model->ID;
+                    $adminCountry->COUNTRY_ID = $country;
+                    $adminCountry->save();
+                }
             }
         } elseif($this->scenario == 'noLoginModifyPassword') {
             $this->adminOperateLogger->clean()->save([

+ 9 - 0
backendApi/modules/v1/models/AdminRole.php

@@ -187,4 +187,13 @@ class AdminRole extends \common\components\ActiveRecord
         }
         return $allColumns;
     }
+
+    /**
+     * 判断是否为超级管理员角色
+     * @param string $roleId 角色ID
+     * @return bool
+     */
+    public static function isSuperAdmin($roleId){
+        return $roleId === Yii::$app->params['superAdminRoleId'];
+    }
 }