Ruby on rails更优雅的方式来validation用户只能编辑自己的内容
我目前正在validation用户只能通过以下方式编辑自己的内容 :
@posts = current_user.posts.find(params[:id])
是否有更简单的方法在所有控制器上执行此操作?
我有一个before_filter,要求用户必须登录,但它不会检查个人用户是谁。
我想知道是否有一个更优雅的解决方案只需要对before_filer方法进行一次编辑,而不是在每个需要保护的模型之前放置current_user方法。
CanCan是另一个提供授权function的gem。 它全部由一个ruby文件管理,然后可以与一行合并到控制器中。 还有一些视图助手,所以你可以使用<% if can? :update, @article %>
<% if can? :update, @article %>
在您的视图中<% if can? :update, @article %>
。
我在某个方面使用了一个框架,让你在查找查询中加入强制条件,但我不认为这是(本机)可以使用Rails。 可能有一个插件。
但是,有时您需要查询超出单个用户的上下文,因此您需要一种方法来覆盖它,可能使用before_filter的:except参数。 但是你必须记住current_user关于例外方法中需要特定于用户的东西,而忘记指定它可能非常危险。
你可以通过以某种方式覆盖模型的查找function来为绝大多数情况保存一点打字,但是你也会使exception变得非常丑陋且具有潜在的危险性。
你检查了盾吗? 如果您不愿意手工编写代码,那么您可以查看aegis。 满足您的要求。 它也有大量的文档。 http://github.com/makandra/aegis
看到这个:
-
没有用户登录时检查权限
-
检查权限
- Rails 4 – 从渲染中删除“created_at”和“updated_at”
- options_for_select选择的值不起作用
- Ruby on Rails ActiveRecord数据库迁移失败
- Ruby on Rails 3最佳实践示例开源应用程序
- 在Rails中关联Post,Comment,User和Vote模型的有效方法是什么?
- OmniAuth Strategies Facebook NoAuthorizationCodeError(必须传递`code`参数或签名请求(通过`signed_request`参数):
- 删除包含文件的文件夹
- 如何在rails视图中生成更改行字符(.html.erb文件)
- 编辑表单时显示所选选项(Rails 4)