RuleController.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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. $query = Rule::query();
  18. $request->whenFilled('type', function ($value) use ($query) {
  19. $query->whereType($value);
  20. });
  21. return view('admin.rule.index', ['rules' => $query->paginate(15)->appends($request->except('page'))]);
  22. }
  23. // 添加审计规则
  24. public function store(RuleRequest $request): JsonResponse
  25. {
  26. if (Rule::create($request->validated())) {
  27. return Response::json(['status' => 'success', 'message' => '提交成功']);
  28. }
  29. return Response::json(['status' => 'fail', 'message' => '操作失败']);
  30. }
  31. // 编辑审计规则
  32. public function update(RuleRequest $request, Rule $rule): JsonResponse
  33. {
  34. if ($rule->update($request->validated())) {
  35. return Response::json(['status' => 'success', 'message' => '操作成功']);
  36. }
  37. return Response::json(['status' => 'fail', 'message' => '操作失败']);
  38. }
  39. // 删除审计规则
  40. public function destroy(Rule $rule): JsonResponse
  41. {
  42. try {
  43. $rule->delete();
  44. } catch (Exception $e) {
  45. return Response::json(['status' => 'fail', 'message' => '操作失败, '.$e->getMessage()]);
  46. }
  47. return Response::json(['status' => 'success', 'message' => '操作成功']);
  48. }
  49. // 用户触发审计规则日志
  50. public function ruleLogList(Request $request)
  51. {
  52. $query = RuleLog::query();
  53. foreach (['user_id', 'node_id', 'rule_id'] as $field) {
  54. $request->whenFilled($field, function ($value) use ($query, $field) {
  55. $query->where($field, $value);
  56. });
  57. }
  58. $request->whenFilled('username', function ($username) use ($query) {
  59. $query->whereHas('user', function ($query) use ($username) {
  60. $query->where('username', 'like', "%{$username}%");
  61. });
  62. });
  63. return view('admin.rule.log', [
  64. 'nodes' => Node::all(),
  65. 'rules' => Rule::all(),
  66. 'ruleLogs' => $query->with('node:id,name', 'user:id,username', 'rule:id,name')->latest()->paginate(15)->appends($request->except('page')),
  67. ]);
  68. }
  69. // 清除所有审计触发日志
  70. public function clearLog(): JsonResponse
  71. {
  72. try {
  73. $ret = RuleLog::query()->delete();
  74. } catch (Exception $e) {
  75. return Response::json(['status' => 'fail', 'message' => '清理失败, '.$e->getMessage()]);
  76. }
  77. if ($ret || RuleLog::doesntExist()) {
  78. return Response::json(['status' => 'success', 'message' => '清理成功']);
  79. }
  80. return Response::json(['status' => 'fail', 'message' => '清理失败']);
  81. }
  82. }