GroupMemberController.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Http\Resources\GroupMemberResource;
  4. use App\Models\GroupInfo;
  5. use App\Models\GroupMember;
  6. use App\Services\AuthService;
  7. use Illuminate\Http\Request;
  8. use Illuminate\Http\Response;
  9. class GroupMemberController extends Controller
  10. {
  11. /**
  12. * Display a listing of the resource.
  13. *
  14. * @return Response
  15. */
  16. public function index(Request $request)
  17. {
  18. //
  19. $user = AuthService::current($request);
  20. if (! $user) {
  21. return $this->error(__('auth.failed'));
  22. }
  23. $result = false;
  24. $indexCol = ['id', 'user_id', 'group_id', 'power', 'level', 'status', 'updated_at', 'created_at'];
  25. switch ($request->input('view')) {
  26. case 'group':
  27. // 获取 group 内所有 成员
  28. // 判断当前用户是否有指定的 group 的权限
  29. if (GroupMember::where('group_id', $request->input('id'))
  30. ->where('user_id', $user['user_uid'])
  31. ->exists()
  32. ) {
  33. $table = GroupMember::where('group_id', $request->input('id'));
  34. // 当前用户角色
  35. $power = GroupMember::where('group_id', $request->input('id'))
  36. ->where('user_id', $user['user_uid'])
  37. ->value('power');
  38. $roles = ['owner', 'manager', 'member'];
  39. } else {
  40. return $this->error(__('auth.failed'));
  41. }
  42. break;
  43. case 'user':
  44. // 获取当前用户参与的group列表
  45. $table = GroupMember::where('user_id', $user['user_uid']);
  46. break;
  47. }
  48. if (isset($_GET['search'])) {
  49. $table = $table->where('title', 'like', $_GET['search'].'%');
  50. }
  51. $count = $table->count();
  52. if (isset($_GET['order']) && isset($_GET['dir'])) {
  53. $table = $table->orderBy($_GET['order'], $_GET['dir']);
  54. } else {
  55. $table = $table->orderBy('created_at');
  56. }
  57. $table->skip($request->input('offset', 0))
  58. ->take($request->input('limit', 1000));
  59. $result = $table->get();
  60. $output = [
  61. 'rows' => GroupMemberResource::collection($result),
  62. 'count' => $count,
  63. ];
  64. if (isset($power) && isset($roles[$power])) {
  65. $output['role'] = $roles[$power];
  66. }
  67. return $this->ok($output);
  68. }
  69. /**
  70. * Store a newly created resource in storage.
  71. *
  72. * @return Response
  73. */
  74. public function store(Request $request)
  75. {
  76. //
  77. $validated = $request->validate([
  78. 'user_id' => 'required',
  79. 'group_id' => 'required',
  80. ]);
  81. // 查找重复的项目
  82. if (GroupMember::where('group_id', $validated['group_id'])->where('user_id', $validated['user_id'])->exists()) {
  83. return $this->error('member exists');
  84. }
  85. $newMember = new GroupMember;
  86. $newMember->id = app('snowflake')->id();
  87. $newMember->user_id = $validated['user_id'];
  88. $newMember->group_id = $validated['group_id'];
  89. $newMember->power = 2;
  90. $newMember->group_name = GroupInfo::find($validated['group_id'])->name;
  91. $newMember->save();
  92. return $this->ok(new GroupMemberResource($newMember));
  93. }
  94. /**
  95. * Display the specified resource.
  96. *
  97. * @return Response
  98. */
  99. public function show(GroupMember $groupMember)
  100. {
  101. //
  102. }
  103. /**
  104. * Update the specified resource in storage.
  105. *
  106. * @return Response
  107. */
  108. public function update(Request $request, GroupMember $groupMember)
  109. {
  110. //
  111. }
  112. /**
  113. * Remove the specified resource from storage.
  114. *
  115. * @return Response
  116. */
  117. public function destroy(Request $request, GroupMember $groupMember)
  118. {
  119. //
  120. // 查看删除者有没有删除权限
  121. // 查询删除者的权限
  122. $currUser = AuthService::current($request);
  123. if (! $currUser) {
  124. return $this->error(__('auth.failed'));
  125. }
  126. $power = GroupMember::where('group_id', $groupMember->group_id)
  127. ->where('user_id', $currUser['user_uid'])
  128. ->select('power')->first();
  129. if (! $power || $power->power >= 2) {
  130. // 普通成员没有删除权限
  131. return $this->error(__('auth.failed'));
  132. }
  133. $delete = $groupMember->delete();
  134. return $this->ok($delete);
  135. }
  136. }