2016-04-14 1 views
1

Auf der Seite wird es mehrere Beiträge von einem Benutzer geben. Jeder Beitrag hat eine ID #, um ihn zu identifizieren, der beim Bearbeiten oder Löschen des Beitrags verwendet wird. Mit Blade kann ich es so einrichten, dass versteckte ID-Div nur angezeigt wird, wenn der authentifizierte Benutzer auf seinem eigenen Profil ist (da nur sie die Beiträge bearbeiten oder löschen können).Laravel Hide Div ID von der Ansicht

Allerdings habe ich auch eine Sympathie-Funktion, die auch diese versteckte ID Div verwendet. Ich möchte nicht, dass jemand die Seitenquelle anzeigt, die ID ändert und dann auf die entsprechende Schaltfläche klickt. Gibt es eine Möglichkeit, die ID in die Ansicht aufzunehmen, aber nicht zu ändern?

Ich könnte versuchen, einige Validierung auf jeder wie wie der Benutzer, Körper, Zeit gebucht, und ID und wenn das nicht übereinstimmt dann einen Fehler zu werfen. Neugierig, wenn es einen besseren Weg gibt.

Ausblick:

<div class="post-like"> 
    <a href="{{ route('post.like', ['postId' => $post->id]) }}" class="post-like-a">Like</a> 
</div> 

Controller:

Die $ postID ist, dass versteckte ID div

public function getLike($postId) 
{ 
    $post = Post::find($postId); 
    if (!$post) { 
     return redirect()->back(); 
    } 
    if (Auth::user()->hasLikedPost($post)) { 
     return redirect()->back(); 
    }   
    $like = $post->likes()->create([]); 
    Auth::user()->likes()->save($like); 
    return redirect()->back(); 
} 

Antwort

0

Wenn ich Ihre Frage richtig verstanden habe, hier ist eine Idee: Sie können die tatsächliche Post-ID verbergen, indem Sie Ihre ID mit einigen nur serverseitigen "Schlüssel" und Hashing verketten.

Zum Beispiel:

In Ihrem app.php Sie so etwas wie "post_mask_key" => "super_secret_123456"

... und in Ihrem Code, so etwas wie hinzufügen:

$maskedPostId = sha1(\Config::get("app.post_mask_key") . $postId);

Dann teilen $maskedPostId mit Blick , die in den HTML-Code eingebettet werden. Der Benutzer kann versuchen, es zu ändern, aber wenn es übergeben wird, können Sie den Hash einfach neu erstellen (da Sie sowohl die Schlüssel- als auch die ID-Server-Seite kennen) und die beiden vergleichen.

Hinweis: Dieser Ansatz ist kryptographisch schwach, sollte aber ausreichen, um einen nicht kritischen Artikel wie eine Post-ID zu maskieren.

+0

Was ist die typische Best Practice, wenn Informationen wie die Benutzer-ID an den Controller gesendet werden müssen? –

+0

Es gibt immer einen Convenience-Security-Trade-Off, der kontextbezogen zur Anwendung ist. Im Allgemeinen ist es wahrscheinlich eine gute Idee, interne DB-IDs zu maskieren - so würde eine UUID funktionieren. Vielleicht möchten Sie auch mit [HMAC-Signaturen] erkunden (http://security.stackexchange.com/questions/20129/how-and-when-doi-use-hmac/20301) – avip

+0

Ich werde Ihre Vorschläge prüfen. Ich kann die ID des Benutzers von allen außer sich selbst verstecken, also ist das in Ordnung. Sie müssen herausfinden, UUID für die Post-ID. –

1

Es ist nicht weise der Benutzer-ID wie folgt aussetzen, aber wenn Sie es wirklich brauchen Laravel bietet eine Möglichkeit, die Autorisierung von Benutzern zu verwalten. Dies kann unter Verwendung von policies oder Modell erfolgen.

Alternativ können Sie diese Berechtigungen ignorieren und stattdessen UUID ID verwenden. Es gibt eine nette package, die es für Sie handhabt. Im Grunde müssen Sie nur ein neues Feld zum Benutzer hinzufügen.

In meinen Anwendungen verwende ich beide.