RuleController.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. <?php
  2. namespace App\Http\Controllers\Admin;
  3. use App\Http\Controllers\Controller;
  4. use App\Http\Requests\Admin\RuleRequest;
  5. use App\Models\Node;
  6. use App\Models\Rule;
  7. use App\Models\RuleLog;
  8. use Exception;
  9. use Illuminate\Http\JsonResponse;
  10. use Illuminate\Http\Request;
  11. use Response;
  12. class RuleController extends Controller
  13. {
  14. // 审计规则列表
  15. public function index(Request $request)
  16. {
  17. $type = $request->input('type');
  18. $query = Rule::query();
  19. if ($type) {
  20. $query->whereType($type);
  21. }
  22. return view('admin.rule.index', ['rules' => $query->paginate(15)->appends($request->except('page'))]);
  23. }
  24. // 添加审计规则
  25. public function store(RuleRequest $request): JsonResponse
  26. {
  27. if (Rule::create($request->validated())) {
  28. return Response::json(['status' => 'success', 'message' => '提交成功']);
  29. }
  30. return Response::json(['status' => 'fail', 'message' => '操作失败']);
  31. }
  32. // 编辑审计规则
  33. public function update(RuleRequest $request, Rule $rule): JsonResponse
  34. {
  35. if ($rule->update($request->validated())) {
  36. return Response::json(['status' => 'success', 'message' => '操作成功']);
  37. }
  38. return Response::json(['status' => 'fail', 'message' => '操作失败']);
  39. }
  40. // 删除审计规则
  41. public function destroy(Rule $rule): JsonResponse
  42. {
  43. try {
  44. $rule->delete();
  45. } catch (Exception $e) {
  46. return Response::json(['status' => 'fail', 'message' => '操作失败, '.$e->getMessage()]);
  47. }
  48. return Response::json(['status' => 'success', 'message' => '操作成功']);
  49. }
  50. // 用户触发审计规则日志
  51. public function ruleLogList(Request $request)
  52. {
  53. $uid = $request->input('uid');
  54. $email = $request->input('email');
  55. $nodeId = $request->input('node_id');
  56. $ruleId = $request->input('rule_id');
  57. $query = RuleLog::query();
  58. if ($uid) {
  59. $query->whereUserId($uid);
  60. }
  61. if (isset($email)) {
  62. $query->whereHas('user', static function ($q) use ($email) {
  63. $q->where('email', 'like', '%'.$email.'%');
  64. });
  65. }
  66. if ($nodeId) {
  67. $query->whereNodeId($nodeId);
  68. }
  69. if ($ruleId) {
  70. $query->whereRuleId($ruleId);
  71. }
  72. return view('admin.rule.log', [
  73. 'nodes' => Node::all(),
  74. 'rules' => Rule::all(),
  75. 'ruleLogs' => $query->latest()->paginate(15)->appends($request->except('page')),
  76. ]);
  77. }
  78. // 清除所有审计触发日志
  79. public function clearLog(): JsonResponse
  80. {
  81. try {
  82. $ret = RuleLog::query()->delete();
  83. } catch (Exception $e) {
  84. return Response::json(['status' => 'fail', 'message' => '清理失败, '.$e->getMessage()]);
  85. }
  86. if ($ret || RuleLog::doesntExist()) {
  87. return Response::json(['status' => 'success', 'message' => '清理成功']);
  88. }
  89. return Response::json(['status' => 'fail', 'message' => '清理失败']);
  90. }
  91. }