GroupMemberController.php 4.8 KB

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