ManageUserController.php 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. <?php
  2. namespace App\Http\Controllers\Manage;
  3. use App\Libs\ApiResponse;
  4. use App\Libs\Utils;
  5. use App\Services\Manage\ManageUserService;
  6. use App\Transformer\Manage\ManageUserTransformer;
  7. use Illuminate\Http\Request;
  8. use Illuminate\Routing\Controller as BaseController;
  9. use Illuminate\Support\Facades\Validator;
  10. class ManageUserController extends BaseController
  11. {
  12. use ApiResponse;
  13. protected $manageUserService;
  14. public function __construct(ManageUserService $manageUserService)
  15. {
  16. $this->manageUserService = $manageUserService;
  17. }
  18. /**
  19. * 公司列表(不带分页)
  20. *
  21. * 权限:仅超管和管理员
  22. *
  23. * @return mixed
  24. */
  25. public function companyList()
  26. {
  27. return $this->success([
  28. 'list' => $this->manageUserService->getCompanyList(),
  29. ]);
  30. }
  31. /**
  32. * 角色可选项
  33. *
  34. * 权限:仅超管和管理员
  35. * - superadmin:admin(管理员)、user(组员)
  36. * - admin:仅 user(组员)
  37. *
  38. * @return mixed
  39. */
  40. public function roleOptions()
  41. {
  42. return $this->success([
  43. 'list' => $this->manageUserService->getRoleOptions(),
  44. ]);
  45. }
  46. /**
  47. * 添加账号
  48. *
  49. * 权限:仅超管和管理员
  50. * - superadmin:选择公司ID(cpid),角色可添加 admin/user
  51. * - admin:cpid 默认本公司,角色仅可添加 user
  52. *
  53. * @param Request $request
  54. * @return mixed
  55. */
  56. public function add(Request $request)
  57. {
  58. $data = $request->all();
  59. $validator = Validator::make($data, [
  60. 'account' => 'required|string|max:32',
  61. 'nickname' => 'required|string|max:100',
  62. 'pwd' => 'required|string|min:6|max:32',
  63. 'is_enabled' => 'required|integer|in:0,1',
  64. 'role' => 'nullable|string|in:admin,user',
  65. 'cpid' => 'nullable|integer|min:1',
  66. ], [
  67. 'account.required' => '请传入账号',
  68. 'account.max' => '账号不能超过32个字符',
  69. 'nickname.required' => '请传入昵称',
  70. 'nickname.max' => '昵称不能超过100个字符',
  71. 'pwd.required' => '请传入密码',
  72. 'pwd.min' => '密码长度不能少于6位',
  73. 'pwd.max' => '密码长度不能超过32位',
  74. 'is_enabled.required' => '请传入是否启用',
  75. 'is_enabled.in' => 'is_enabled仅支持0或1',
  76. 'role.in' => '角色仅支持admin(公司1管理员)或user(组员)',
  77. 'role.string' => '角色参数不合法',
  78. 'cpid.integer' => 'cpid必须为整数',
  79. 'cpid.min' => 'cpid不能小于1',
  80. ]);
  81. if ($validator->fails()) {
  82. Utils::throwError('1002:' . $validator->errors()->first());
  83. }
  84. $result = $this->manageUserService->addUser($data);
  85. return $this->success($result);
  86. }
  87. /**
  88. * 用户列表
  89. *
  90. * 权限:仅超管和管理员
  91. * - superadmin:全部用户(id 倒序)
  92. * - admin:自己置顶 + 同公司组员(id 倒序)
  93. *
  94. * @param Request $request
  95. * @return mixed
  96. */
  97. public function list(Request $request)
  98. {
  99. $data = $request->all();
  100. $validator = Validator::make($data, [
  101. 'page' => 'nullable|integer|min:1',
  102. 'per_page' => 'nullable|integer|min:1|max:100',
  103. 'keyword' => 'nullable|string|max:100',
  104. 'nickname' => 'nullable|string|max:100',
  105. 'is_enabled' => 'nullable|integer|in:0,1',
  106. 'company_name' => 'nullable|string|max:100',
  107. ], [
  108. 'page.integer' => 'page必须为整数',
  109. 'page.min' => 'page不能小于1',
  110. 'per_page.integer' => 'per_page必须为整数',
  111. 'per_page.min' => 'per_page不能小于1',
  112. 'per_page.max' => 'per_page不能超过100',
  113. 'keyword.max' => 'keyword不能超过100个字符',
  114. 'nickname.max' => 'nickname不能超过100个字符',
  115. 'is_enabled.in' => 'is_enabled仅支持0或1',
  116. 'company_name.max' => 'company_name不能超过100个字符',
  117. ]);
  118. if ($validator->fails()) {
  119. Utils::throwError('1002:' . $validator->errors()->first());
  120. }
  121. $result = $this->manageUserService->getUserList($data);
  122. return $this->success([
  123. 'meta' => getMeta($result),
  124. 'list' => (new ManageUserTransformer())->newEachUser($result),
  125. ]);
  126. }
  127. /**
  128. * 修改用户
  129. *
  130. * 权限:仅超管和管理员
  131. * - superadmin:任意用户,可改昵称/密码/是否启用/角色
  132. * - admin:仅同公司组员,可改昵称/密码/是否启用
  133. *
  134. * @param Request $request
  135. * @return mixed
  136. */
  137. public function edit(Request $request)
  138. {
  139. $data = $request->all();
  140. $validator = Validator::make($data, [
  141. 'uid' => 'required|integer|min:1',
  142. 'nickname' => 'nullable|string|max:100',
  143. 'pwd' => 'nullable|string|min:6|max:32',
  144. 'is_enabled' => 'nullable|integer|in:0,1',
  145. 'role' => 'nullable|string|in:superadmin,admin,user',
  146. ], [
  147. 'uid.required' => '请传入目标用户uid',
  148. 'uid.integer' => 'uid必须为整数',
  149. 'uid.min' => 'uid不能小于1',
  150. 'nickname.max' => '昵称不能超过100个字符',
  151. 'pwd.min' => '密码长度不能少于6位',
  152. 'pwd.max' => '密码长度不能超过32位',
  153. 'is_enabled.in' => 'is_enabled仅支持0或1',
  154. 'role.in' => '角色仅支持superadmin、admin或user',
  155. ]);
  156. if ($validator->fails()) {
  157. Utils::throwError('1002:' . $validator->errors()->first());
  158. }
  159. $hasAny = array_key_exists('nickname', $data)
  160. || array_key_exists('pwd', $data)
  161. || array_key_exists('is_enabled', $data)
  162. || array_key_exists('role', $data);
  163. if (!$hasAny) {
  164. Utils::throwError('1002:请至少传入昵称、密码、是否启用或角色之一');
  165. }
  166. $result = $this->manageUserService->updateUser($data);
  167. return $this->success($result);
  168. }
  169. /**
  170. * 删除用户
  171. *
  172. * 权限:仅超管和管理员
  173. * - superadmin:可删除 admin/user,不允许删除超管
  174. * - admin:仅可删除同公司组员
  175. *
  176. * @param Request $request
  177. * @return mixed
  178. */
  179. public function delete(Request $request)
  180. {
  181. $data = $request->all();
  182. $validator = Validator::make($data, [
  183. 'uid' => 'required|integer|min:1',
  184. ], [
  185. 'uid.required' => '请传入目标用户uid',
  186. 'uid.integer' => 'uid必须为整数',
  187. 'uid.min' => 'uid不能小于1',
  188. ]);
  189. if ($validator->fails()) {
  190. Utils::throwError('1002:' . $validator->errors()->first());
  191. }
  192. $result = $this->manageUserService->deleteUser($data);
  193. return $this->success(['success' => $result ? 1 : 0]);
  194. }
  195. }