Răsfoiți Sursa

导入加人判断权限

visuddhinanda 2 ani în urmă
părinte
comite
db4783168a
1 a modificat fișierele cu 78 adăugiri și 12 ștergeri
  1. 78 12
      app/Http/Controllers/DhammaTermController.php

+ 78 - 12
app/Http/Controllers/DhammaTermController.php

@@ -422,6 +422,33 @@ class DhammaTermController extends Controller
         if(!$user){
             return $this->error(__('auth.failed'));
         }
+        /**
+         * 判断是否有权限
+         */
+        switch ($request->get('view')) {
+            case 'channel':
+                # 向channel里面导入,忽略源数据的channel id 和 owner 都设置为这个channel 的
+                $channel = ChannelApi::getById($request->get('id'));
+                $owner_id = $channel['studio_id'];
+                if($owner_id !== $user["user_uid"]){
+                    //判断是否为协作
+                    $power = ShareApi::getResPower($user["user_uid"],$request->get('id'));
+                    if($power<30){
+                        return $this->error(__('auth.failed'),[],403);
+                    }
+                }
+                $language = $channel['lang'];
+                break;
+            case 'studio':
+                # 向 studio 里面导入,忽略源数据的 owner 但是要检测 channel id 是否有权限
+                $owner_id = StudioApi::getIdByName($request->get('name'));
+                if(!$owner_id){
+                    return $this->error('no studio name',[],403);
+                }
+
+                break;
+        }
+
         $message = "";
         $filename = $request->get('filename');
         $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
@@ -430,6 +457,7 @@ class DhammaTermController extends Controller
         $activeWorksheet = $spreadsheet->getActiveSheet();
         $currLine = 2;
         $countFail = 0;
+
         do {
             # code...
             $id = $activeWorksheet->getCell("A{$currLine}")->getValue();
@@ -439,35 +467,73 @@ class DhammaTermController extends Controller
             $note = $activeWorksheet->getCell("E{$currLine}")->getValue();
             $tag = $activeWorksheet->getCell("F{$currLine}")->getValue();
             $language = $activeWorksheet->getCell("G{$currLine}")->getValue();
+            $channel_id = $activeWorksheet->getCell("H{$currLine}")->getValue();
             $query = ['word'=>$word,'tag'=>$tag];
             $channelId = null;
             switch ($request->get('view')) {
                 case 'channel':
-                    # code...
+                    # 向channel里面导入,忽略源数据的channel id 和 owner 都设置为这个channel 的
                     $query['channal'] = $request->get('id');
-                    $channel = ChannelApi::getById($request->get('id'));
-                    $owner_id = $channel['studio_id'];
-                    $lang = $channel['lang'];
                     $channelId = $request->get('id');
                     break;
                 case 'studio':
-                    $owner_id = StudioApi::getIdByName($request->get('name'));
-                    if(!$owner_id){
-                        return $this->error('no studio name');
+                    # 向 studio 里面导入,忽略源数据的owner 但是要检测 channel id 是否有权限
+                    $query['owner'] = $owner_id;
+                    if(!empty($channel_id)){
+
+                        //有channel 数据,查看是否在studio中
+                        $channel = ChannelApi::getById($channel_id);
+                        if($channel === false){
+                            $message .= "没有查到版本信息:{$channel_id} - {$word}\n";
+                            $currLine++;
+                            $countFail++;
+                            continue;
+                        }
+                        if($owner_id != $channel['studio_id']){
+                            $message .= "版本不在studio中:{$channel_id} - {$word}\n";
+                            $currLine++;
+                            $countFail++;
+                            continue;
+                        }
+                        $query['channal'] = $channel_id;
+                        $channelId = $channel_id;
                     }
                     # code...
                     break;
-                default:
-                    # code...
-                    break;
             }
 
-            if(empty($word)){
+            if(empty($id) && empty($word)){
                 break;
             }
+
             //查询此id是否有旧数据
             if(!empty($id)){
                 $oldRow = DhammaTerm::find($id);
+                //TODO 有 id 无 word 删除数据
+                if(empty($word)){
+                    //查看权限
+                    if($oldRow->owner !== $user['user_uid']){
+                        if(!empty($oldRow->channal)){
+                            //看是否为协作
+                            $power = ShareApi::getResPower($user['user_uid'],$oldRow->channal);
+                            if($power < 20){
+                                $message .= "无删除权限:{$id} - {$word}\n";
+                                $currLine++;
+                                $countFail++;
+                                continue;
+                            }
+                        }else{
+                            $message .= "无删除权限:{$id} - {$word}\n";
+                            $currLine++;
+                            $countFail++;
+                            continue;
+                        }
+                    }
+                    //删除
+                    $oldRow->delete();
+                    $currLine++;
+                    continue;
+                }
             }else{
                 $oldRow = null;
             }
@@ -500,7 +566,7 @@ class DhammaTermController extends Controller
             $row->other_meaning = $other_meaning;
             $row->note = $note;
             $row->tag = $tag;
-            $row->language = $lang;
+            $row->language = $language;
             $row->channal = $channelId;
             $row->editor_id = $user['user_id'];
             $row->owner = $owner_id;