ManageUserController.php 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  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. 'avatar' => 'nullable|string|max:255',
  63. 'pwd' => 'required|string|min:6|max:32',
  64. 'is_enabled' => 'required|integer|in:0,1',
  65. 'role' => 'nullable|string|in:admin,user',
  66. 'cpid' => 'nullable|integer|min:1',
  67. ], [
  68. 'account.required' => '请传入账号',
  69. 'account.max' => '账号不能超过32个字符',
  70. 'nickname.required' => '请传入昵称',
  71. 'nickname.max' => '昵称不能超过100个字符',
  72. 'avatar.max' => '头像不能超过255个字符',
  73. 'pwd.required' => '请传入密码',
  74. 'pwd.min' => '密码长度不能少于6位',
  75. 'pwd.max' => '密码长度不能超过32位',
  76. 'is_enabled.required' => '请传入是否启用',
  77. 'is_enabled.in' => 'is_enabled仅支持0或1',
  78. 'role.in' => '角色仅支持admin(公司1管理员)或user(组员)',
  79. 'role.string' => '角色参数不合法',
  80. 'cpid.integer' => 'cpid必须为整数',
  81. 'cpid.min' => 'cpid不能小于1',
  82. ]);
  83. if ($validator->fails()) {
  84. Utils::throwError('1002:' . $validator->errors()->first());
  85. }
  86. $result = $this->manageUserService->addUser($data);
  87. return $this->success($result);
  88. }
  89. /**
  90. * 用户列表
  91. *
  92. * 权限:仅超管和管理员
  93. * - superadmin:全部用户(id 倒序)
  94. * - admin:自己置顶 + 同公司组员(id 倒序)
  95. *
  96. * @param Request $request
  97. * @return mixed
  98. */
  99. public function list(Request $request)
  100. {
  101. $data = $request->all();
  102. $validator = Validator::make($data, [
  103. 'page' => 'nullable|integer|min:1',
  104. 'per_page' => 'nullable|integer|min:1|max:100',
  105. 'keyword' => 'nullable|string|max:100',
  106. 'nickname' => 'nullable|string|max:100',
  107. 'is_enabled' => 'nullable|integer|in:0,1',
  108. 'company_name' => 'nullable|string|max:100',
  109. ], [
  110. 'page.integer' => 'page必须为整数',
  111. 'page.min' => 'page不能小于1',
  112. 'per_page.integer' => 'per_page必须为整数',
  113. 'per_page.min' => 'per_page不能小于1',
  114. 'per_page.max' => 'per_page不能超过100',
  115. 'keyword.max' => 'keyword不能超过100个字符',
  116. 'nickname.max' => 'nickname不能超过100个字符',
  117. 'is_enabled.in' => 'is_enabled仅支持0或1',
  118. 'company_name.max' => 'company_name不能超过100个字符',
  119. ]);
  120. if ($validator->fails()) {
  121. Utils::throwError('1002:' . $validator->errors()->first());
  122. }
  123. $result = $this->manageUserService->getUserList($data);
  124. return $this->success([
  125. 'meta' => getMeta($result),
  126. 'list' => (new ManageUserTransformer())->newEachUser($result),
  127. ]);
  128. }
  129. /**
  130. * 修改用户
  131. *
  132. * 权限:仅超管和管理员
  133. * - superadmin:任意用户,可改昵称/密码/是否启用/角色
  134. * - admin:仅同公司组员,可改昵称/密码/是否启用
  135. *
  136. * @param Request $request
  137. * @return mixed
  138. */
  139. public function edit(Request $request)
  140. {
  141. $data = $request->all();
  142. $validator = Validator::make($data, [
  143. 'uid' => 'required|integer|min:1',
  144. 'nickname' => 'nullable|string|max:100',
  145. 'avatar' => 'nullable|string|max:255',
  146. 'pwd' => 'nullable|string|min:6|max:32',
  147. 'is_enabled' => 'nullable|integer|in:0,1',
  148. 'role' => 'nullable|string|in:superadmin,admin,user',
  149. ], [
  150. 'uid.required' => '请传入目标用户uid',
  151. 'uid.integer' => 'uid必须为整数',
  152. 'uid.min' => 'uid不能小于1',
  153. 'nickname.max' => '昵称不能超过100个字符',
  154. 'avatar.max' => '头像不能超过255个字符',
  155. 'pwd.min' => '密码长度不能少于6位',
  156. 'pwd.max' => '密码长度不能超过32位',
  157. 'is_enabled.in' => 'is_enabled仅支持0或1',
  158. 'role.in' => '角色仅支持superadmin、admin或user',
  159. ]);
  160. if ($validator->fails()) {
  161. Utils::throwError('1002:' . $validator->errors()->first());
  162. }
  163. $hasAny = array_key_exists('nickname', $data)
  164. || array_key_exists('avatar', $data)
  165. || array_key_exists('pwd', $data)
  166. || array_key_exists('is_enabled', $data)
  167. || array_key_exists('role', $data);
  168. if (!$hasAny) {
  169. Utils::throwError('1002:请至少传入昵称、头像、密码、是否启用或角色之一');
  170. }
  171. $result = $this->manageUserService->updateUser($data);
  172. return $this->success($result);
  173. }
  174. /**
  175. * 删除用户
  176. *
  177. * 权限:仅超管和管理员
  178. * - superadmin:可删除 admin/user,不允许删除超管
  179. * - admin:仅可删除同公司组员
  180. *
  181. * @param Request $request
  182. * @return mixed
  183. */
  184. public function delete(Request $request)
  185. {
  186. $data = $request->all();
  187. $validator = Validator::make($data, [
  188. 'uid' => 'required|integer|min:1',
  189. ], [
  190. 'uid.required' => '请传入目标用户uid',
  191. 'uid.integer' => 'uid必须为整数',
  192. 'uid.min' => 'uid不能小于1',
  193. ]);
  194. if ($validator->fails()) {
  195. Utils::throwError('1002:' . $validator->errors()->first());
  196. }
  197. $result = $this->manageUserService->deleteUser($data);
  198. return $this->success(['success' => $result ? 1 : 0]);
  199. }
  200. }