PermissionsHelper.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. <?php
  2. /*
  3. * @Description: 无表注释
  4. * @Version: *
  5. * @Autor: lexuan
  6. * @Date: 2024-11-28 13:29:06
  7. * @LastEditors: lexuan
  8. * @LastEditTime: 2024-11-28 13:29:06
  9. */
  10. namespace App\DataApiNew\Helper;
  11. use App\DataApiNew\Models\Permissions;
  12. use App\Models\Pages;
  13. use App\Models\SpoutExport;
  14. use App\Models\SpoutImport;
  15. use App\DataApiNew\Models\AdminUsers;
  16. use Illuminate\Http\Request;
  17. class PermissionsHelper
  18. {
  19. // 查询条件
  20. public function whens($query, $request)
  21. {
  22. return $query
  23. ->when($request->filled('id'), fn ($q) => $q->where('id', $request->id));
  24. }
  25. // 查询列表
  26. public function select(Request $request)
  27. {
  28. $page = new Pages($request, Permissions::query());
  29. $page->before(function ($query) {
  30. $query->select(Permissions::$selectFields)
  31. ->where('status', 1)
  32. ->whereNull('parent_id')
  33. ->orWhere('parent_id', 0)
  34. ->orderby('weight', 'desc');
  35. return $query;
  36. });
  37. $page->after(function ($result) {
  38. $result->each(function ($item) {
  39. $item->children = Permissions::descendantsOf($item->id)->toTree();
  40. });
  41. });
  42. $result = $page->paginate();
  43. return $result;
  44. }
  45. // 导出
  46. public function export(Request $request)
  47. {
  48. $query = Permissions::select(Permissions::$selectFields);
  49. $query = $this->whens($query, $request);
  50. $query->orderBy('created_at', 'desc');
  51. $header = [];
  52. $getEnValue = $this->getEnValue();
  53. $excel = new SpoutExport($header);
  54. $excel->setData($query->get());
  55. $result = $excel->setEnum($getEnValue)->spoutToExcel('excel_out');
  56. return $result ? success($result['url']) : error();
  57. }
  58. // 导入
  59. public function import(Request $request)
  60. {
  61. $header = [];
  62. $getEnValue = $this->getEnValue();
  63. $SpoutImport = new SpoutImport($header);
  64. $dataList = $SpoutImport->setRequest($request)->getExcelData();
  65. return $dataList;
  66. }
  67. // 获取枚举值
  68. public function getEnValue()
  69. {
  70. $data = [
  71. 'open_status' => [
  72. 0 => "待开卡",
  73. 1 => "开卡中",
  74. ]
  75. ];
  76. return $data;
  77. }
  78. // 查询一条
  79. public function find(Request $request)
  80. {
  81. $request->validate([
  82. 'id' => 'required|integer',
  83. ]);
  84. $result = Permissions::where(['id' => $request->id])->select(Permissions::$selectFields)->first();
  85. return success($result);
  86. }
  87. // 添加
  88. public function insert(Request $request)
  89. {
  90. $request->validate([
  91. 'name' => 'required',
  92. 'route' => 'required',
  93. ]);
  94. sys_log($request, '添加权限', '权限管理');
  95. $name = $request->name;
  96. $route = $request->route;
  97. $weight = $request->input('weight', 0);
  98. if ($request->filled('parent_id')) {
  99. $parentNode = Permissions::find($request->parent_id);
  100. $node = new Permissions(['name' => $name, 'menu_level' => ($parentNode->menu_level ?? 0) + 1, 'route' => $route, 'guard_name' => 'web', 'weight' => $weight]);
  101. $result = $node->appendToNode($parentNode)->save();
  102. } else {
  103. $node = new Permissions(['name' => $name,'menu_level' => 1, 'route' => $route, 'guard_name' => 'web', 'weight' => $weight]);
  104. $result = $node->save();
  105. }
  106. if ($result) {
  107. return success();
  108. } else {
  109. return error();
  110. }
  111. }
  112. // 修改
  113. public function update(Request $request)
  114. {
  115. $request->validate([
  116. 'id' => 'required|integer',
  117. ]);
  118. sys_log($request, '修改权限', '权限管理');
  119. $id = $request->input('id');
  120. $category = Permissions::find($id);
  121. if ($request->filled('parent_id')) {
  122. $parent = Permissions::find($request->parent_id);
  123. $category->parent()->associate($parent);
  124. } else {
  125. $category->parent()->dissociate();
  126. }
  127. // 更新其他字段
  128. $result = $category->update($request->all());
  129. if ($result) {
  130. return success();
  131. } else {
  132. return error();
  133. }
  134. }
  135. // 删除
  136. public function delete(Request $request)
  137. {
  138. $request->validate([
  139. 'ids' => 'required',
  140. ]);
  141. sys_log($request, '删除权限', '权限管理');
  142. $id_arr = explode(",", $request->ids);
  143. $count = Permissions::whereIn('parent_id', $id_arr)->count();
  144. if ($count > 0) {
  145. return ['code' => 0, 'msg' => "存在子数据,禁止删除"];
  146. }
  147. $oplist = [];
  148. foreach ($id_arr as $perID) {
  149. $res = 0;
  150. $node = Permissions::find($perID);
  151. if ($node->roles()->count() > 0) {
  152. $oplist[] = [
  153. 'id' => $perID,
  154. 'msg' => '权限正在被使用',
  155. 'status' => $res
  156. ];
  157. continue;
  158. }
  159. $res = $node->delete();
  160. $oplist[] = [
  161. 'id' => $perID,
  162. 'status' => $res
  163. ];
  164. }
  165. return ['code' => 1, 'msg' => 'success', 'data' => $oplist];
  166. }
  167. // 获取用户权限列表
  168. public function getUserPermissions(Request $request)
  169. {
  170. if ($request->filled('user_id')) {
  171. $user_id = $request->input('user_id');
  172. } else {
  173. $user_id = auth()->id();
  174. }
  175. // 获取用户权限
  176. $user = AdminUsers::find($user_id);
  177. $permissions = $user->getAllPermissions()->pluck('id')->toArray();
  178. // 树状展示权限
  179. $perlist = Permissions::select(Permissions::$selectFields)
  180. ->whereIn('id', $permissions)
  181. ->where('status', 1)
  182. ->whereNull('parent_id')
  183. ->orWhere('parent_id', 0)
  184. ->orderby('weight', 'desc')
  185. ->get();
  186. $perlist->each(function ($item) use ($permissions) {
  187. $item->children = Permissions::descendantsOf($item->id)
  188. ->where('status', 1)
  189. ->whereIn('id', $permissions)
  190. ->toTree();
  191. });
  192. return ['code' => 1, 'msg' => "success", 'data' => $perlist];
  193. }
  194. }