RuleController.php 3.4 KB

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