RuleController.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. <?php
  2. namespace App\Http\Controllers\Admin;
  3. use App\Http\Controllers\Controller;
  4. use App\Models\Node;
  5. use App\Models\Rule;
  6. use App\Models\RuleGroup;
  7. use App\Models\RuleLog;
  8. use Exception;
  9. use Illuminate\Http\JsonResponse;
  10. use Illuminate\Http\Request;
  11. use Response;
  12. use Validator;
  13. class RuleController extends Controller
  14. {
  15. // 审计规则列表
  16. public function index(Request $request)
  17. {
  18. $type = $request->input('type');
  19. $query = Rule::query();
  20. if ($type) {
  21. $query->whereType($type);
  22. }
  23. $view['rules'] = $query->paginate(15)->appends(
  24. $request->except('page')
  25. );
  26. return view('admin.rule.index', $view);
  27. }
  28. // 添加审计规则
  29. public function store(Request $request): JsonResponse
  30. {
  31. $validator = Validator::make(
  32. $request->all(),
  33. [
  34. 'type' => 'required|between:1,4',
  35. 'name' => 'required',
  36. 'pattern' => 'required',
  37. ]
  38. );
  39. if ($validator->fails()) {
  40. return Response::json(
  41. ['status' => 'fail', 'message' => $validator->errors()->all()]
  42. );
  43. }
  44. $obj = new Rule();
  45. $obj->type = $request->input('type');
  46. $obj->name = $request->input('name');
  47. $obj->pattern = $request->input('pattern');
  48. $obj->save();
  49. if ($obj->id) {
  50. return Response::json(['status' => 'success', 'message' => '提交成功']);
  51. }
  52. return Response::json(['status' => 'fail', 'message' => '操作失败']);
  53. }
  54. // 编辑审计规则
  55. public function update(Request $request, $id): JsonResponse
  56. {
  57. $ret = Rule::whereId($id)->update(
  58. [
  59. 'name' => $request->input('rule_name'),
  60. 'pattern' => $request->input('rule_pattern'),
  61. ]
  62. );
  63. if ($ret) {
  64. return Response::json(['status' => 'success', 'message' => '操作成功']);
  65. }
  66. return Response::json(['status' => 'fail', 'message' => '操作失败']);
  67. }
  68. // 删除审计规则
  69. public function destroy($id): JsonResponse
  70. {
  71. try {
  72. Rule::whereId($id)->delete();
  73. foreach (RuleGroup::all() as $ruleGroup) {
  74. $rules = $ruleGroup->rules;
  75. if ($rules && in_array($id, $rules, true)) {
  76. $ruleGroup->rules = array_merge(array_diff($rules, [$id]));
  77. $ruleGroup->save();
  78. }
  79. }
  80. } catch (Exception $e) {
  81. return Response::json(
  82. ['status' => 'fail', 'message' => '操作失败, ' . $e->getMessage()]
  83. );
  84. }
  85. return Response::json(['status' => 'success', 'message' => '操作成功']);
  86. }
  87. // 用户触发审计规则日志
  88. public function ruleLogList(Request $request)
  89. {
  90. $uid = $request->input('uid');
  91. $email = $request->input('email');
  92. $nodeId = $request->input('node_id');
  93. $ruleId = $request->input('rule_id');
  94. $query = RuleLog::query();
  95. if ($uid) {
  96. $query->whereUserId($uid);
  97. }
  98. if (isset($email)) {
  99. $query->whereHas(
  100. 'user',
  101. static function ($q) use ($email) {
  102. $q->where('email', 'like', '%' . $email . '%');
  103. }
  104. );
  105. }
  106. if ($nodeId) {
  107. $query->whereNodeId($nodeId);
  108. }
  109. if ($ruleId) {
  110. $query->whereRuleId($ruleId);
  111. }
  112. $view['nodeList'] = Node::all();
  113. $view['ruleList'] = Rule::all();
  114. $view['ruleLogs'] = $query->latest()->paginate(15)->appends(
  115. $request->except('page')
  116. );
  117. return view('admin.rule.log', $view);
  118. }
  119. // 清除所有审计触发日志
  120. public function clearLog(): JsonResponse
  121. {
  122. try {
  123. $ret = RuleLog::query()->delete();
  124. } catch (Exception $e) {
  125. return Response::json(
  126. ['status' => 'fail', 'message' => '清理失败, ' . $e->getMessage()]
  127. );
  128. }
  129. $result = RuleLog::doesntExist();
  130. if ($ret || $result) {
  131. return Response::json(['status' => 'success', 'message' => '清理成功']);
  132. }
  133. return Response::json(['status' => 'fail', 'message' => '清理失败']);
  134. }
  135. }