| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 | <?phpnamespace App\Http\Controllers\Admin;use App\Http\Controllers\Controller;use App\Models\Node;use App\Models\Rule;use App\Models\RuleGroup;use App\Models\RuleLog;use Exception;use Illuminate\Http\JsonResponse;use Illuminate\Http\Request;use Response;use Validator;class RuleController extends Controller {	// 审计规则列表	public function index(Request $request): \Illuminate\Http\Response {		$type = $request->input('type');		$query = Rule::query();		if($type){			$query->whereType($type);		}		$view['rules'] = $query->paginate(15)->appends($request->except('page'));		return Response::view('admin.rule.index', $view);	}	// 添加审计规则	public function store(Request $request): JsonResponse {		$validator = Validator::make($request->all(), [			'type'    => 'required|between:1,4',			'name'    => 'required',			'pattern' => 'required',		]);		if($validator->fails()){			return Response::json(['status' => 'fail', 'message' => $validator->errors()->all()]);		}		$obj = new Rule();		$obj->type = $request->input('type');		$obj->name = $request->input('name');		$obj->pattern = $request->input('pattern');		$obj->save();		if($obj->id){			return Response::json(['status' => 'success', 'message' => '提交成功']);		}		return Response::json(['status' => 'fail', 'message' => '操作失败']);	}	// 编辑审计规则	public function update(Request $request, $id): JsonResponse {		$ret = Rule::whereId($id)->update([			'name'    => $request->input('rule_name'),			'pattern' => $request->input('rule_pattern')		]);		if($ret){			return Response::json(['status' => 'success', 'message' => '操作成功']);		}		return Response::json(['status' => 'fail', 'message' => '操作失败']);	}	// 删除审计规则	public function destroy($id): JsonResponse {		try{			Rule::whereId($id)->delete();			foreach(RuleGroup::all() as $ruleGroup){				$rules = $ruleGroup->rules;				if($rules && in_array($id, $rules, true)){					$ruleGroup->rules = array_merge(array_diff($rules, [$id]));					$ruleGroup->save();				}			}		}catch(Exception $e){			return Response::json(['status' => 'fail', 'message' => '操作失败, '.$e->getMessage()]);		}		return Response::json(['status' => 'success', 'message' => '操作成功']);	}	// 用户触发审计规则日志	public function ruleLogList(Request $request): \Illuminate\Http\Response {		$uid = $request->input('uid');		$email = $request->input('email');		$nodeId = $request->input('node_id');		$ruleId = $request->input('rule_id');		$query = RuleLog::query();		if($uid){			$query->whereUserId($uid);		}		if(isset($email)){			$query->whereHas('user', static function($q) use ($email) {				$q->where('email', 'like', '%'.$email.'%');			});		}		if($nodeId){			$query->whereNodeId($nodeId);		}		if($ruleId){			$query->whereRuleId($ruleId);		}		$view['nodeList'] = Node::all();		$view['ruleList'] = Rule::all();		$view['ruleLogs'] = $query->latest()->paginate(15)->appends($request->except('page'));		return Response::view('admin.rule.log', $view);	}	// 清除所有审计触发日志	public function clearLog(): JsonResponse {		try{			$ret = RuleLog::query()->delete();		}catch(Exception $e){			return Response::json(['status' => 'fail', 'message' => '清理失败, '.$e->getMessage()]);		}		$result = RuleLog::doesntExist();		if($ret || $result){			return Response::json(['status' => 'success', 'message' => '清理成功']);		}		return Response::json(['status' => 'fail', 'message' => '清理失败']);	}}
 |