Sfoglia il codice sorgente

新增用户数据隔离,仅针对入口页相关接口

lh 2 settimane fa
parent
commit
f2e9ed9f8c

+ 6 - 3
app/Console/Test/RegisterUserCommand.php

@@ -21,7 +21,7 @@ class RegisterUserCommand extends Command
     /**
      * @var string
      */
-    protected $signature = 'registerUser {--account=} {--pwd=} {--nickname=} {--role=}';
+    protected $signature = 'registerUser {--account=} {--pwd=} {--nickname=} {--role=} {--cpid=}';
 
     /**
      * The console command description.
@@ -49,15 +49,17 @@ class RegisterUserCommand extends Command
         $pwd = $this->option('pwd');
         $nickname = $this->option('nickname');
         $role = $this->option('role');
+        $cpid = $this->option('cpid');
         if (!$account) dd('请输入账号');
         if (!$pwd) $pwd = $account.'123456';
         if (!$nickname) $nickname = $account;
         if (!$role) $role = 'user';
-        $boolen = $this->registerUser($account, $pwd, $nickname, $role);
+        if (!$cpid) $cpid = 1;
+        $boolen = $this->registerUser($account, $pwd, $nickname, $role, $cpid);
         if ($boolen) dd('创建用户成功!');
     }
 
-    private function registerUser($account, $pwd, $nickname, $role) {
+    private function registerUser($account, $pwd, $nickname, $role, $cpid) {
         $o_pass = $pwd;
         $pwd = md5($pwd.$this->salt);
 
@@ -67,6 +69,7 @@ class RegisterUserCommand extends Command
             'o_pass'        => $o_pass,
             'pwd'           => $pwd,
             'role'          => $role,
+            'cpid'          => $cpid,
             'is_enabled'    => 1,
             'created_at'    => date('Y-m-d H:i:s'),
             'updated_at'    => date('Y-m-d H:i:s'),

+ 28 - 6
app/Services/Anime/AnimeService.php

@@ -263,9 +263,10 @@ class AnimeService
     }
 
     public function chatList($data) {
+        $uid = Site::getUid();
         $anime_name = getProp($data, 'anime_name');
 
-        $query = DB::table('mp_animes')->where('is_deleted', 0);
+        $query = DB::table('mp_animes')->where('is_deleted', 0)->where('user_id', $uid);
         if ($anime_name) {
             $query->where('anime_name', 'like', "%$anime_name%");
         }
@@ -539,10 +540,11 @@ class AnimeService
     }
 
     public function animeDetail($data) {
+        $uid = Site::getUid();
         $anime_id = getProp($data, 'anime_id');
-        $anime = DB::table('mp_animes')->where('id', $anime_id)->where('is_deleted', 0)
+        $anime = DB::table('mp_animes')->where('id', $anime_id)->where('is_deleted', 0)->where('user_id', $uid)
         ->selectRaw('id as anime_id, anime_name, intro, highlights, roles, role_relationship, core_contradiction, art_style, scenes, status, remark, generate_status, created_at, ace_mode')->first();
-        if (!$anime) Utils::throwError('20003:该剧本不存在!');
+        if (!$anime) Utils::throwError('20003:权限不足');
         $anime = (array)$anime;
         $anime['roles'] = json_decode($anime['roles']);
         $anime['scenes'] = json_decode($anime['scenes']);
@@ -560,12 +562,17 @@ class AnimeService
     }
 
     public function episodeInfo($data) {
+        $uid = Site::getUid();
         $anime_id = getProp($data, 'anime_id');
         $episode_id = getProp($data, 'episode_id');
         if (!$anime_id || !$episode_id) {
             Utils::throwError('1002:请选择剧集');
         }
 
+        // 验证用户权限
+        $anime = DB::table('mp_animes')->where('id', $anime_id)->where('user_id', $uid)->where('is_deleted', 0)->first();
+        if (!$anime) Utils::throwError('20003:权限不足');
+
         $episode = DB::table('mp_anime_episodes')->where('anime_id', $anime_id)->where('id', $episode_id)->select('id as episode_id', 'anime_id', 'episode_number', 'title', 'intro', 'art_style', 'roles', 'scenes', 'is_generated')->first();
         if (!$episode) Utils::throwError('20003:该剧集不存在!');
         $episode = (array)$episode;
@@ -625,6 +632,7 @@ class AnimeService
     }
 
     public function segmentInfo($data) {
+        $uid = Site::getUid();
         $segment_id = getProp($data, 'segment_id');
         if (!$segment_id) {
             Utils::throwError('1002:请选择分镜');
@@ -633,6 +641,12 @@ class AnimeService
         // 获取分镜信息
         $segment = DB::table('mp_episode_segments')->where('segment_id', $segment_id)->first();
         
+        // 验证用户权限
+        if ($segment) {
+            $anime = DB::table('mp_animes')->where('id', getProp($segment, 'anime_id'))->where('user_id', $uid)->where('is_deleted', 0)->first();
+            if (!$anime) Utils::throwError('20003:权限不足');
+        }
+        
         $result = [
             'segment_id' => getProp($segment, 'segment_id'),
             'segment_number' => getProp($segment, 'segment_number'),
@@ -5409,6 +5423,7 @@ class AnimeService
      * @return array 返回当前目录下的所有子目录和角色列表(递归)
      */
     public function globalProducts($data) {
+        $uid = Site::getUid();
         $cpid = Site::getCpid();
         $id = getProp($data, 'id', 0);
         $parent_id = getProp($data, 'parent_id', 0);
@@ -5422,6 +5437,7 @@ class AnimeService
         if ($id || $product_name) {
             $query = DB::table('mp_products')
                 ->where('cpid', $cpid)
+                ->where('user_id', $uid)
                 ->where('is_deleted', 0);
             
             // 如果指定了 id,按 id 精确查询
@@ -5458,7 +5474,7 @@ class AnimeService
         }
         
         // 递归获取所有子目录和角色
-        return $this->getChildrenRecursive($cpid, $parent_id, $product);
+        return $this->getChildrenRecursive($cpid, $parent_id, $product, $uid);
     }
     
     /**
@@ -5466,15 +5482,21 @@ class AnimeService
      * @param int $cpid 公司ID
      * @param int $parent_id 父目录ID
      * @param int|null $product 产品类型筛选 1.角色 2.场景 3.道具
+     * @param int $uid 用户ID
      * @return array
      */
-    private function getChildrenRecursive($cpid, $parent_id, $product = null) {
+    private function getChildrenRecursive($cpid, $parent_id, $product = null, $uid = null) {
         // 查询当前层级的所有项(文件夹和角色)
         $query = DB::table('mp_products')
             ->where('cpid', $cpid)
             ->where('is_deleted', 0)
             ->where('parent_id', $parent_id);
         
+        // 添加用户ID验证
+        if ($uid) {
+            $query->where('user_id', $uid);
+        }
+        
         // 如果指定了 product,添加筛选条件(文件夹和角色都需要筛选)
         if ($product) {
             $query->where('product', $product);
@@ -5503,7 +5525,7 @@ class AnimeService
             
             // 如果是文件夹,递归获取其子项
             if ($item->type == 2) {
-                $children = $this->getChildrenRecursive($cpid, $item->id, $product);
+                $children = $this->getChildrenRecursive($cpid, $item->id, $product, $uid);
                 if (!empty($children)) {
                     $itemArray['children'] = $children;
                 }

+ 6 - 3
app/Services/DeepSeek/DeepSeekService.php

@@ -1698,10 +1698,11 @@ Q版卡通风格,头大身小,造型圆润可爱,线条简单,色彩明
     }
 
     public function scriptList($data) {
+        $uid = Site::getUid();
         $script_id = getProp($data, 'script_id');
         $script_name = getProp($data, 'script_name');
         
-        $query = DB::table('mp_scripts')->where('is_deleted', 0)->select('*');
+        $query = DB::table('mp_scripts')->where('is_deleted', 0)->where('user_id', $uid)->select('*');
         if ($script_id) {
             $query->where('id', $script_id);
         }
@@ -1712,10 +1713,11 @@ Q版卡通风格,头大身小,造型圆润可爱,线条简单,色彩明
     }
 
     public function scripts($data) {
+        $uid = Site::getUid();
         $script_id = getProp($data, 'script_id');
         $script_name = getProp($data, 'script_name');
         
-        $query = DB::table('mp_scripts')->where('is_deleted', 0)->select('id as script_id', 'script_name');
+        $query = DB::table('mp_scripts')->where('is_deleted', 0)->where('user_id', $uid)->select('id as script_id', 'script_name');
         if ($script_id) {
             $query->where('id', $script_id);
         }
@@ -1728,8 +1730,9 @@ Q版卡通风格,头大身小,造型圆润可爱,线条简单,色彩明
     }
 
     public function scriptInfo($data) {
+        $uid = Site::getUid();
         $script_id = getProp($data, 'script_id');
-        $script = DB::table('mp_scripts')->where('id', $script_id)->where('is_deleted', 0)
+        $script = DB::table('mp_scripts')->where('id', $script_id)->where('is_deleted', 0)->where('user_id', $uid)
         // ->selectRaw('id as script_id, script_name, intro, highlights, roles, role_relationship, core_contradiction, art_style, scenes, status, start_episode_sequence, end_episode_sequence, episode_num, remark, created_at')->first();
         ->selectRaw('id as script_id, script_name')->first();
         if (!$script) Utils::throwError('20003:该剧本不存在!');