2017-10-14 6 views
0

Ich möchte überprüfen, bevor ein Systemanruf mit beiden System oder `` ausgeführt wird, um sicherzustellen, dass der Anruf von einem bestimmten Modul getätigt wurde.Auslösen eines Ereignisses bevor `` Systemanruf ausgeführt wird

Ich möchte es nicht verwenden, um den Befehl zu bereinigen oder zu validieren, aber stelle nur sicher, dass nur ein Modul diese Aufrufe durchführen kann.

Danke.

Antwort

0

die Lösung gefunden:

module BacktickURI 
    alias_method :standard_back_tick_call, :` #` #Comment for fixing Notepad++ highlighting, needs even back ticks 
    alias_method :standard_system_call, :system 

    def `(uri)#` 
     standard_back_tick_call(uri) 
    end 

    def system uri 
    standard_system_call uri 
end 
end 

Edit: Der obige Code ist nicht der vollständige Prozess, es ist nur das Bit, das die Aufgabe hat ich suchte, das System und Graviszeichen Methoden zu aktualisieren.

Alias_method verschiebt den Bereich mit include und verhindert so den Zirkelverweis oder Ähnliches.

+0

Was ist der Sinn des Aliasing 'system' hier? Es scheint, dass Sie einen Zirkelverweis in der 'system'-Methodendefinition haben. Außerdem denke ich, dass es einfacher wäre, einfach eine Wrapper-Methode zu erstellen und diese aus dem Code anstatt aus Backticks heraus aufzurufen. –

+0

alias_method verschiebt den Bereich zur Laufzeit. Wenn ich include verwende, werden die vier Methoden als separate Entitäten eingeführt (ich denke, das ist was passiert). Der Zweck von diesem ist, mich und andere davon abzuhalten, mit jedem Projekt zu arbeiten, in das es eingebettet wird und versehentlich einen Systemanruf zu machen, wenn sie nicht sollten. Ich habe einen Whitelisting-Ansatz für das Management verwendet. Wenn der Benutzer etwas tun muss, kann er die Funktion manuell über einen Schalter deaktivieren, der dem Modul hinzugefügt wurde. – CBusBus

Verwandte Themen