Kaynağa Gözat

basic的访问限制

visuddhinanda 1 yıl önce
ebeveyn
işleme
9c179d2c3a
1 değiştirilmiş dosya ile 47 ekleme ve 1 silme
  1. 47 1
      app/Http/Controllers/DiscussionController.php

+ 47 - 1
app/Http/Controllers/DiscussionController.php

@@ -14,6 +14,7 @@ use App\Http\Api\MdRender;
 use App\Http\Api\AuthApi;
 use App\Http\Api\Mq;
 use App\Http\Controllers\ArticleController;
+use App\Http\Api\UserApi;
 
 class DiscussionController extends Controller
 {
@@ -25,6 +26,10 @@ class DiscussionController extends Controller
     public function index(Request $request)
     {
         //
+        $user = AuthApi::current($request);
+        if($user){
+            $userInfo = UserApi::getByUuid($user['user_uid']);
+        }
 		switch ($request->get('view')) {
             case 'question-by-topic':
                 $topic = Discussion::where('id',$request->get('id'));
@@ -42,10 +47,30 @@ class DiscussionController extends Controller
                                     ->where('parent',null);
                 break;
             case 'question':
+                /**
+                 * 禁止:
+                 * 未注册用户看到任何人发表的discussion
+                 * basic用户看到别人发表的discussion
+                 */
+                if(!$user && $request->get('type')==='discussion'){
+                    return $this->ok([
+                        "rows" => [],
+                        "count" => 0,
+                        'active' => 0,
+                        'close' => 0,
+                        'can_create' => false,
+                        'can_reply' => false,
+                        ]);
+                }
                 $table = Discussion::where('res_id',$request->get('id'))
                                     ->where('type', $request->get('type','discussion'))
                                     ->where('status',$request->get('status','active'))
                                     ->where('parent',null);
+                if($request->get('type')==='discussion'){
+                    if(isset($userInfo) && in_array('basic',$userInfo['roles'])){
+                        $table = $table->where('editor_uid',$userInfo['id']);
+                    }
+                }
                 $activeNumber = Discussion::where('res_id',$request->get('id'))
                                             ->where('parent',null)
                                             ->where('type', $request->get('type','discussion'))
@@ -65,7 +90,7 @@ class DiscussionController extends Controller
             case 'res_id':
                 /**
                  * 先获取顶级节点
-                 *
+                 * 需要确定用户身份,manager查看全部topic 普通用户只显示自己提交的topic
                  */
                 $roots = Discussion::where('res_id',$request->get('id'))
                                     ->where('type', $request->get('type','discussion'))
@@ -85,6 +110,27 @@ class DiscussionController extends Controller
                                             ->where('type', $request->get('type','discussion'))
                                             ->where('status','close')->count();
                 break;
+            case 'topic-by-user':
+                /**
+                 * 某用户发表的全部topic
+                 *
+                 */
+                if(!$user){
+                    return $this->error('',403,403);
+                }
+                $table = Discussion::where('editor_uid',$user['user_uid'])
+                                    ->where('type', $request->get('type','discussion'))
+                                    ->whereIn('status',explode(',',$request->get('status','active')) )
+                                    ->where('parent',null);
+                $activeNumber = Discussion::where('editor_uid',$user['user_uid'])
+                                            ->where('parent',null)
+                                            ->where('type', $request->get('type','discussion'))
+                                            ->where('status','active')->count();
+                $closeNumber = Discussion::where('editor_uid',$user['user_uid'])
+                                            ->where('parent',null)
+                                            ->where('type', $request->get('type','discussion'))
+                                            ->where('status','close')->count();
+                break;
             case 'all':
                 $table = Discussion::where('parent',null);
                 $activeNumber = Discussion::where('parent',null)