CourseMemberController.php 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  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. $user = AuthApi::current($request);
  124. if(!$user){
  125. return $this->error(__('auth.failed'));
  126. }
  127. if($request->has('channel_id')) {
  128. if($courseMember->user_id !== $user['user_uid']){
  129. return $this->error(__('auth.failed'));
  130. }
  131. $courseMember->channel_id = $request->get('channel_id');
  132. }
  133. $courseMember->save();
  134. return $this->ok(new CourseMemberResource($courseMember));
  135. }
  136. public function set_channel(Request $request)
  137. {
  138. //
  139. $user = AuthApi::current($request);
  140. if(!$user){
  141. return $this->error(__('auth.failed'));
  142. }
  143. if($request->has('channel_id')) {
  144. $courseMember = CourseMember::where('course_id',$request->get('course_id'))
  145. ->where('user_id',$user['user_uid'])
  146. ->first();
  147. if($courseMember){
  148. $courseMember->channel_id = $request->get('channel_id');
  149. $courseMember->save();
  150. return $this->ok(new CourseMemberResource($courseMember));
  151. }else{
  152. return $this->error(__('auth.failed'));
  153. }
  154. }
  155. }
  156. /**
  157. * Remove the specified resource from storage.
  158. *
  159. * @param \Illuminate\Http\Request $request
  160. * @param \App\Models\CourseMember $courseMember
  161. * @return \Illuminate\Http\Response
  162. */
  163. public function destroy(Request $request,CourseMember $courseMember)
  164. {
  165. //查看删除者有没有删除权限
  166. //查询删除者的权限
  167. $user = AuthApi::current($request);
  168. if(!$user){
  169. return $this->error(__('auth.failed'));
  170. }
  171. Log::info('course'.$courseMember->course_id);
  172. Log::info('user id'.$user["user_uid"]);
  173. $isOwner = Course::where('id',$courseMember->course_id)->where('studio_id',$user["user_uid"])->exists();
  174. if(!$isOwner){
  175. $courseUser = CourseMember::where('course_id',$courseMember->course_id)
  176. ->where('user_id',$user["user_uid"])
  177. ->select('role')->first();
  178. if(!$courseUser || $courseUser->role ==="student"){
  179. //普通成员没有删除权限
  180. return $this->error(__('auth.failed'));
  181. }
  182. }
  183. $delete = $courseMember->delete();
  184. return $this->ok($delete);
  185. }
  186. /**
  187. * 获取当前用户权限
  188. *
  189. * @param \Illuminate\Http\Request $request
  190. * @return \Illuminate\Http\Response
  191. */
  192. public function curr(Request $request)
  193. {
  194. $user = AuthApi::current($request);
  195. if(!$user){
  196. return $this->error(__('auth.failed'));
  197. }
  198. $courseUser = CourseMember::where('course_id',$request->get("course_id"))
  199. ->where('user_id',$user["user_uid"])
  200. ->select(['role','channel_id'])->first();
  201. if($courseUser){
  202. return $this->ok($courseUser);
  203. }else{
  204. return $this->error("not member");
  205. }
  206. }
  207. }