Laravel从视图中隐藏Div ID

时间:2016-04-14 19:42:59

标签: laravel laravel-5.2

在页面上,用户会有几个帖子。每个帖子都有一个id#来标识在编辑或删除帖子时使用的内容。使用刀片,我可以使隐藏ID ID仅在经过身份验证的用户位于自己的配置文件时显示(因为只允许他们编辑或删除帖子)。

但是,我也喜欢使用隐藏的ID div。我不希望有人查看页面源,更改ID,然后单击“喜欢”按钮。有没有办法在视图中包含ID,但不允许更改它?

我可以尝试对每个进行一些验证,例如匹配用户,正文,发布时间和ID,如果不匹配则抛出错误。好奇,如果有更好的方法。

查看:

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

控制器:

$ postId是隐藏的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();
}

2 个答案:

答案 0 :(得分:1)

不明智地暴露用户&#39;这样的ID,但如果你真的需要它,Laravel提供了一种处理用户的方法。行动授权。可以使用policies或模型scopes来完成。

或者,您可以忽略这些授权并使用UUID代替ID。 有一个很好的package可以为你处理它。基本上,您只需要向用户添加新字段即可。表

在我的应用程序中,我同时使用它们。

答案 1 :(得分:0)

如果我理解你的问题,这里有一个想法:你可以通过将你的ID与一些​​服务器端的“密钥”连接并进行散列来隐藏实际的帖子ID。

例如:

app.php中添加"post_mask_key" => "super_secret_123456"

之类的内容

...在您的代码中,例如:

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

然后,与您的视图共享$maskedPostId,该视图将嵌入到HTML中。用户可以尝试更改它,但是在提交时,您可以轻松地重新生成哈希(因为您知道密钥和ID服务器端)并比较这两者。

注意:这种方法在加密方面很弱,但应足以屏蔽非关键项目,例如帖子ID。