Ruby on rails更优雅的方式来验证用户只能编辑自己的内容

时间:2010-07-06 02:48:48

标签: ruby-on-rails

我目前正在验证用户是否可以编辑他们自己的内容

@posts = current_user.posts.find(params[:id])

是否有更简单的方法在所有控制器上执行此操作?

我有一个before_filter,要求用户必须登录,但不会检查个人用户是谁。

我想知道是否有更优雅的解决方案只需要对before_filer方法进行一次编辑,而不是在需要保护的每个模型之前放置current_user方法。

3 个答案:

答案 0 :(得分:1)

CanCan是另一个提供授权功能的gem。它全部由一个ruby文件管理,然后可以与一行合并到控制器中。还有一些视图助手,因此您可以在视图中使用<% if can? :update, @article %>

答案 1 :(得分:0)

我在某个时候使用了一个框架,让你在查找查询中加入强制条件,但我认为这不是(本机)可以使用Rails。可能有一个插件。

但是,有时您会想要在单个用户的上下文之外进行查询,因此您需要一种方法来覆盖它,可能使用before_filter的:except参数。但是你必须记住current_user在的例外方法中的东西需要是特定于用户的,而忘记指定它可能是非常危险的。

你可以通过以某种方式覆盖模型的查找功能来为绝大多数情况保存一点打字,但是你也会使异常变得极其丑陋且有潜在危险。

答案 2 :(得分:0)

你检查了盾吗?如果您不愿意手工编写代码,那么您可以查看aegis。满足您的要求。它也有大量的文档。 http://github.com/makandra/aegis

见: