2
0

CourseMemberController.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Models\CourseMember;
  4. use App\Models\Course;
  5. use Illuminate\Http\Request;
  6. use App\Http\Resources\CourseMemberResource;
  7. use App\Http\Api\AuthApi;
  8. use Illuminate\Support\Facades\Log;
  9. class CourseMemberController extends Controller
  10. {
  11. /**
  12. * Display a listing of the resource.
  13. *
  14. * @return \Illuminate\Http\Response
  15. */
  16. public function index(Request $request)
  17. {
  18. //
  19. $result=false;
  20. $indexCol = ['id','user_id','course_id','role','updated_at','created_at'];
  21. switch ($request->get('view')) {
  22. case 'course':
  23. # 获取 course 内所有 成员
  24. $user = AuthApi::current($request);
  25. if(!$user){
  26. return $this->error(__('auth.failed'));
  27. }
  28. //TODO 判断当前用户是否有指定的 course 的权限
  29. $table = CourseMember::where('course_id', $request->get('id'));
  30. break;
  31. }
  32. if(isset($_GET["search"])){
  33. $table = $table->where('title', 'like', $_GET["search"]."%");
  34. }
  35. $count = $table->count();
  36. if(isset($_GET["order"]) && isset($_GET["dir"])){
  37. $table = $table->orderBy($_GET["order"],$_GET["dir"]);
  38. }else{
  39. $table = $table->orderBy('updated_at','desc');
  40. }
  41. if(isset($_GET["limit"])){
  42. $offset = 0;
  43. if(isset($_GET["offset"])){
  44. $offset = $_GET["offset"];
  45. }
  46. $table = $table->skip($offset)->take($_GET["limit"]);
  47. }
  48. $result = $table->get();
  49. //获取当前用户角色
  50. $isOwner = Course::where('id',$request->get('id'))->where('studio_id',$user["user_uid"])->exists();
  51. $role = 'unknown';
  52. if($isOwner){
  53. $role = 'owner';
  54. }else{
  55. foreach ($result as $key => $value) {
  56. # 找到当前用户
  57. if($user["user_uid"]===$value->user_id){
  58. switch ($value->role) {
  59. case 'assistant':
  60. $role = 'manager';
  61. break;
  62. default:
  63. # code...
  64. break;
  65. }
  66. break;
  67. }
  68. }
  69. }
  70. if($result){
  71. return $this->ok(["rows"=>CourseMemberResource::collection($result),'role'=>$role,"count"=>$count]);
  72. }else{
  73. return $this->error("没有查询到数据");
  74. }
  75. }
  76. /**
  77. * Store a newly created resource in storage.
  78. *
  79. * @param \Illuminate\Http\Request $request
  80. * @return \Illuminate\Http\Response
  81. */
  82. public function store(Request $request)
  83. {
  84. //
  85. $validated = $request->validate([
  86. 'user_id' => 'required',
  87. 'course_id' => 'required',
  88. 'role' => 'required',
  89. ]);
  90. //查找重复的项目
  91. if(CourseMember::where('course_id', $validated['course_id'])
  92. ->where('user_id',$validated['user_id'])
  93. ->exists()){
  94. return $this->error('member exists');
  95. }
  96. $newMember = new CourseMember();
  97. $newMember->user_id = $validated['user_id'];
  98. $newMember->course_id = $validated['course_id'];
  99. $newMember->role = $validated['role'];
  100. $newMember->save();
  101. return $this->ok(new CourseMemberResource($newMember));
  102. }
  103. /**
  104. * Display the specified resource.
  105. *
  106. * @param \App\Models\CourseMember $courseMember
  107. * @return \Illuminate\Http\Response
  108. */
  109. public function show(CourseMember $courseMember)
  110. {
  111. //
  112. }
  113. /**
  114. * Update the specified resource in storage.
  115. *
  116. * @param \Illuminate\Http\Request $request
  117. * @param \App\Models\CourseMember $courseMember
  118. * @return \Illuminate\Http\Response
  119. */
  120. public function update(Request $request, CourseMember $courseMember)
  121. {
  122. //
  123. }
  124. /**
  125. * Remove the specified resource from storage.
  126. *
  127. * @param \Illuminate\Http\Request $request
  128. * @param \App\Models\CourseMember $courseMember
  129. * @return \Illuminate\Http\Response
  130. */
  131. public function destroy(Request $request,CourseMember $courseMember)
  132. {
  133. //查看删除者有没有删除权限
  134. //查询删除者的权限
  135. $user = AuthApi::current($request);
  136. if(!$user){
  137. return $this->error(__('auth.failed'));
  138. }
  139. Log::info('course'.$courseMember->course_id);
  140. Log::info('user id'.$user["user_uid"]);
  141. $isOwner = Course::where('id',$courseMember->course_id)->where('studio_id',$user["user_uid"])->exists();
  142. if(!$isOwner){
  143. $courseUser = CourseMember::where('course_id',$courseMember->course_id)
  144. ->where('user_id',$user["user_uid"])
  145. ->select('role')->first();
  146. if(!$courseUser || $courseUser->role ==="student"){
  147. //普通成员没有删除权限
  148. return $this->error(__('auth.failed'));
  149. }
  150. }
  151. $delete = $courseMember->delete();
  152. return $this->ok($delete);
  153. }
  154. }