get('view')) { case 'studio': # 获取studio内所有group $user = AuthApi::current($request); if(!$user){ return $this->error(__('auth.failed')); } //判断当前用户是否有指定的studio的权限 $studioId = StudioApi::getIdByName($request->get('name')); if($user['user_uid'] !== $studioId){ return $this->error(__('auth.failed')); } $table = GroupInfo::select($indexCol); if($request->get('view2','my')==='my'){ $table = $table->where('owner', $studioId); }else{ //我参加的group $groupId = GroupMember::where('user_id',$studioId) ->groupBy('group_id') ->select('group_id') ->get(); $table = $table->whereIn('uid', $groupId); $table = $table->where('owner','<>', $studioId); } break; case 'key': $table = GroupInfo::select($indexCol)->where('name','like', $request->get('key')."%"); break; } if($request->has("search")){ $table = $table->where('name', 'like', "%" . $request->get("search")."%"); } $count = $table->count(); if(isset($_GET["order"]) && isset($_GET["dir"])){ $table = $table->orderBy($_GET["order"],$_GET["dir"]); }else{ if($request->get('view') === 'studio_list'){ $table = $table->orderBy('count','desc'); }else{ $table = $table->orderBy('updated_at','desc'); } } if(isset($_GET["limit"])){ $offset = 0; if(isset($_GET["offset"])){ $offset = $_GET["offset"]; } $table = $table->skip($offset)->take($_GET["limit"]); } $result = $table->get(); if($result){ return $this->ok(["rows"=>GroupResource::collection($result),"count"=>$count]); }else{ return $this->error("没有查询到数据"); } } /** * 获取我的,和协作channel数量 * * @return \Illuminate\Http\Response */ public function showMyNumber(Request $request){ $user = AuthApi::current($request); if(!$user){ return $this->error(__('auth.failed')); } //判断当前用户是否有指定的studio的权限 $studioId = StudioApi::getIdByName($request->get('studio')); if($user['user_uid'] !== $studioId){ return $this->error(__('auth.failed')); } //我的 $my = GroupMember::where('user_id', $studioId)->where('power',0)->count(); //协作 $collaboration = GroupMember::where('user_id', $studioId)->where('power','<>',0)->count(); return $this->ok(['my'=>$my,'collaboration'=>$collaboration]); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { // $user = AuthApi::current($request); if(!$user){ return $this->error(__('auth.failed')); } //判断当前用户是否有指定的studio的权限 if($user['user_uid'] !== StudioApi::getIdByName($request->get('studio_name'))){ return $this->error(__('auth.failed')); } //查询是否重复 if(GroupInfo::where('name',$request->get('name'))->where('owner',$user['user_uid'])->exists()){ return $this->error(__('validation.exists',['name'])); } $studioId = StudioApi::getIdByName($request->get('studio_name')); $group = new GroupInfo; DB::transaction(function() use($group,$request,$user,$studioId){ $group->id = app('snowflake')->id(); $group->uid = Str::uuid(); $group->name = $request->get('name'); $group->owner = $studioId; $group->create_time = time()*1000; $group->modify_time = time()*1000; $group->save(); $newMember = new GroupMember(); $newMember->id=app('snowflake')->id(); $newMember->user_id = $studioId; $newMember->group_id = $group->uid; $newMember->power = 0; $newMember->group_name = $request->get('name'); $newMember->save(); }); return $this->ok($group); } /** * Display the specified resource. * * @param string $id * @return \Illuminate\Http\Response */ public function show(Request $request,$id) { // $indexCol = ['uid','name','description','owner','updated_at','created_at']; $result = GroupInfo::select($indexCol)->where('uid', $id)->first(); if(!$result){ return $this->error("没有查询到数据"); } if($result->status<30){ //私有,判断权限 $user = AuthApi::current($request); if(!$user){ return $this->error(__('auth.failed')); } //判断当前用户是否有指定的studio的权限 if($user['user_uid'] !== $result->owner){ //非所有者 //TODO 判断是否协作 return $this->error(__('auth.failed')); } } return $this->ok(new GroupResource($result)); } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param \App\Models\GroupInfo $group * @return \Illuminate\Http\Response */ public function update(Request $request, GroupInfo $group) { // $user = AuthApi::current($request); if(!$user){ return $this->error(__('auth.failed')); } //判断当前用户是否有修改权限 if($user['user_uid'] !== $group->owner){ return $this->error(__('auth.failed')); } $group->name = $request->get('name'); $group->description = $request->get('description'); if($request->has('status')) { $group->status = $request->get('status'); } $group->create_time = time()*1000; $group->modify_time = time()*1000; $group->save(); return $this->ok($group); } /** * Remove the specified resource from storage. * @param \Illuminate\Http\Request $request * @param \App\Models\GroupInfo $group * @return \Illuminate\Http\Response */ public function destroy(Request $request,GroupInfo $group) { // $user = AuthApi::current($request); if(!$user){ return $this->error(__('auth.failed')); } //判断当前用户是否有指定的 group 的删除权限 if($user['user_uid'] !== $group->owner){ return $this->error(__('auth.failed')); } $delete = 0; DB::transaction(function() use($group,$delete){ //删除group member $memberDelete = GroupMember::where('group_id',$group->uid)->delete(); $delete = $group->delete(); }); return $this->ok($delete); } }