RuleController.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  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($request->except('page'));
  24. return view('admin.rule.index', $view);
  25. }
  26. // 添加审计规则
  27. public function store(Request $request): JsonResponse
  28. {
  29. $validator = Validator::make($request->all(), [
  30. 'type' => 'required|between:1,4',
  31. 'name' => 'required',
  32. 'pattern' => 'required',
  33. ]);
  34. if ($validator->fails()) {
  35. return Response::json(['status' => 'fail', 'message' => $validator->errors()->all()]);
  36. }
  37. $rule = new Rule();
  38. $rule->type = $request->input('type');
  39. $rule->name = $request->input('name');
  40. $rule->pattern = $request->input('pattern');
  41. $rule->save();
  42. if ($rule->id) {
  43. return Response::json(['status' => 'success', 'message' => '提交成功']);
  44. }
  45. return Response::json(['status' => 'fail', 'message' => '操作失败']);
  46. }
  47. // 编辑审计规则
  48. public function update(Request $request, $id): JsonResponse
  49. {
  50. if (Rule::find($id)->update(['name' => $request->input('rule_name'), 'pattern' => $request->input('rule_pattern')])) {
  51. return Response::json(['status' => 'success', 'message' => '操作成功']);
  52. }
  53. return Response::json(['status' => 'fail', 'message' => '操作失败']);
  54. }
  55. // 删除审计规则
  56. public function destroy($id): JsonResponse
  57. {
  58. try {
  59. Rule::whereId($id)->delete();
  60. foreach (RuleGroup::all() as $ruleGroup) {
  61. $rules = $ruleGroup->rules;
  62. if ($rules && in_array($id, $rules, true)) {
  63. $ruleGroup->rules = array_merge(array_diff($rules, [$id]));
  64. $ruleGroup->save();
  65. }
  66. }
  67. } catch (Exception $e) {
  68. return Response::json(['status' => 'fail', 'message' => '操作失败, '.$e->getMessage()]);
  69. }
  70. return Response::json(['status' => 'success', 'message' => '操作成功']);
  71. }
  72. // 用户触发审计规则日志
  73. public function ruleLogList(Request $request)
  74. {
  75. $uid = $request->input('uid');
  76. $email = $request->input('email');
  77. $nodeId = $request->input('node_id');
  78. $ruleId = $request->input('rule_id');
  79. $query = RuleLog::query();
  80. if ($uid) {
  81. $query->whereUserId($uid);
  82. }
  83. if (isset($email)) {
  84. $query->whereHas('user', static function ($q) use ($email) {
  85. $q->where('email', 'like', '%'.$email.'%');
  86. });
  87. }
  88. if ($nodeId) {
  89. $query->whereNodeId($nodeId);
  90. }
  91. if ($ruleId) {
  92. $query->whereRuleId($ruleId);
  93. }
  94. $view['nodeList'] = Node::all();
  95. $view['ruleList'] = Rule::all();
  96. $view['ruleLogs'] = $query->latest()->paginate(15)->appends($request->except('page'));
  97. return view('admin.rule.log', $view);
  98. }
  99. // 清除所有审计触发日志
  100. public function clearLog(): JsonResponse
  101. {
  102. try {
  103. $ret = RuleLog::query()->delete();
  104. } catch (Exception $e) {
  105. return Response::json(['status' => 'fail', 'message' => '清理失败, '.$e->getMessage()]);
  106. }
  107. $result = RuleLog::doesntExist();
  108. if ($ret || $result) {
  109. return Response::json(['status' => 'success', 'message' => '清理成功']);
  110. }
  111. return Response::json(['status' => 'fail', 'message' => '清理失败']);
  112. }
  113. }