RolesHelper.php 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. <?php
  2. /*
  3. * @Description: 无表注释
  4. * @Version: *
  5. * @Autor: lexuan
  6. * @Date: 2024-11-28 14:04:56
  7. * @LastEditors: lexuan
  8. * @LastEditTime: 2024-11-28 14:04:56
  9. */
  10. namespace App\DataApiNew\Helper;
  11. use App\DataApiNew\Models\Roles;
  12. use App\Models\Pages;
  13. use App\Models\SpoutExport;
  14. use App\Models\SpoutImport;
  15. use App\DataApiNew\Models\AdminUsers;
  16. use App\DataApiNew\Models\Permissions;
  17. use Illuminate\Http\Request;
  18. class RolesHelper
  19. {
  20. // 查询条件
  21. public function whens($query, $request)
  22. {
  23. return $query
  24. ->when($request->filled('id'), fn ($q) => $q->where('id', $request->id));
  25. }
  26. // 查询列表
  27. public function select(Request $request)
  28. {
  29. $page = new Pages($request, Roles::query());
  30. $page->before(function ($query) use ($request) {
  31. $query->select(Roles::$selectFields);
  32. return $this->whens($query, $request);
  33. });
  34. $result = $page->paginate();
  35. return $result;
  36. }
  37. // 导出
  38. public function export(Request $request)
  39. {
  40. $query = Roles::select(Roles::$selectFields);
  41. $query = $this->whens($query, $request);
  42. $query->orderBy('created_at', 'desc');
  43. $header = [];
  44. $getEnValue = $this->getEnValue();
  45. $excel = new SpoutExport($header);
  46. $excel->setData($query->get());
  47. $result = $excel->setEnum($getEnValue)->spoutToExcel('excel_out');
  48. return $result ? success($result['url']) : error();
  49. }
  50. // 导入
  51. public function import(Request $request)
  52. {
  53. $header = [];
  54. $getEnValue = $this->getEnValue();
  55. $SpoutImport = new SpoutImport($header);
  56. $dataList = $SpoutImport->setRequest($request)->getExcelData();
  57. return $dataList;
  58. }
  59. // 获取枚举值
  60. public function getEnValue()
  61. {
  62. $data = [
  63. 'open_status' => [
  64. 0 => "待开卡",
  65. 1 => "开卡中",
  66. ]
  67. ];
  68. return $data;
  69. }
  70. // 查询一条
  71. public function find(Request $request)
  72. {
  73. $request->validate([
  74. 'id' => 'required|integer',
  75. ]);
  76. $roles = Roles::select(Roles::$selectFields)->find($request->id);
  77. $roles->permissions = $roles->permissions;
  78. return ['code' => 1, 'msg' => "success", 'data' => $roles];
  79. }
  80. // 添加
  81. public function insert(Request $request)
  82. {
  83. $request->validate([
  84. 'name' => 'required',
  85. 'permissions' => 'string'
  86. ]);
  87. $result = Roles::create(['name' => $request->name, 'guard_name' => 'web']);
  88. // 向角色分配权限
  89. if($request->filled('permissions')){
  90. $role = Roles::find($result->id);
  91. $permissions = explode(',', $request->permissions);
  92. $permissions = Permissions::find($permissions);
  93. $role->syncPermissions($permissions);
  94. }
  95. if ($result) {
  96. return success();
  97. } else {
  98. return error();
  99. }
  100. }
  101. // 修改
  102. public function update(Request $request)
  103. {
  104. $request->validate([
  105. 'id' => 'required|integer',
  106. 'permissions' => 'string'
  107. ]);
  108. if($request->filled('name')){
  109. Roles::where(['id' => $request->id])->update(['name' => $request->name]);
  110. }
  111. // 向角色分配权限
  112. if($request->filled('permissions')){
  113. $role = Roles::find($request->id);
  114. $permissions = explode(',', $request->permissions);
  115. $permissions = Permissions::find($permissions);
  116. $role->syncPermissions($permissions);
  117. }
  118. return success();
  119. }
  120. // 删除
  121. public function delete(Request $request)
  122. {
  123. $request->validate([
  124. 'ids' => 'required',
  125. ]);
  126. $id_str = $request->ids;
  127. $arr = explode(",", $id_str);
  128. $oplist = [];
  129. foreach ($arr as $roleId) {
  130. $res = 0;
  131. $role = Roles::find($roleId);
  132. // 检查角色是否有用户在使用
  133. if ($role->users()->count() > 0) {
  134. $oplist[] = [
  135. 'id' => $roleId,
  136. 'msg' => '角色正在被使用',
  137. 'status' => $res
  138. ];
  139. continue;
  140. }
  141. $role->permissions()->detach(); // 清除角色与权限的关联
  142. $res = $role->delete();
  143. $oplist[] = [
  144. 'id' => $roleId,
  145. 'status' => $res
  146. ];
  147. }
  148. return ['code' => 1, 'msg' => "success", 'data' => $oplist];
  149. }
  150. // 向角色分配权限
  151. public function assignPermissionsToRoles(Request $request)
  152. {
  153. $request->validate([
  154. 'id' => 'required|integer',
  155. 'permissions' => 'required|string',
  156. ]);
  157. $role = Roles::find($request->id);
  158. $permissions = explode(',', $request->permissions);
  159. $permissions = Permissions::find($permissions);
  160. $result = $role->syncPermissions($permissions);
  161. if ($result) {
  162. return success();
  163. } else {
  164. return error();
  165. }
  166. }
  167. // 向用户分配角色
  168. public function assignRolesToUsers(Request $request)
  169. {
  170. $op_user_id = auth()->id();
  171. if (!AdminUsers::isAdmin($op_user_id)) {
  172. return ['code' => 0, 'msg' => '无权限操作'];
  173. }
  174. $request->validate([
  175. 'user_id' => 'required|integer',
  176. ]);
  177. $user = AdminUsers::find($request->user_id);
  178. $roles = explode(',', $request->roles);
  179. $roles = Roles::find($roles);
  180. $result = $user->syncRoles($roles);
  181. if ($result) {
  182. return success();
  183. } else {
  184. return error();
  185. }
  186. }
  187. // 获取用户角色列表
  188. public function getUserRoles(Request $request)
  189. {
  190. if ($request->filled('user_id')) {
  191. $user_id = $request->input('user_id');
  192. } else {
  193. $user_id = auth()->id();
  194. }
  195. $user = AdminUsers::find($user_id);
  196. $roles = $user->roles;
  197. return ['code' => 1, 'msg' => "success", 'data' => $roles];
  198. }
  199. }