2010-04-29 256 views
2

我目前正在构建一个Rails应用程序,并试图找出验证用户拥有他们正在尝试编辑的任何数据对象的最佳方式。Rails用户授权

我已经有了一个身份验证系统(restful-authentication),并且我使用一个简单的before_filter来确保用户在可以访问网站的某些区域之前登录。

但是,我不确定处理用户试图编辑特定数据的最佳方式 - 例如,让我的网站上的用户可以拥有图书,并且他们可以编辑图书的属性(标题,作者,网页等),但他们应该只能为自己拥有的图书做到这一点。

在我的书籍控制器上的'编辑'方法,我会发现只有检索current_user拥有的书籍。但是,如果另一个用户知道该书的ID,他们可以输入http://website.com/book/7/edit,并且控制器会验证他们是否已登录,然后显示该书的编辑页面(似乎绕过控制器)。

处理这个问题的最佳方法是什么?它更多的是我不明白的Rails约定路由问题(能够直接进入编辑页面),还是应该在我的模型中添加before_find,before_save,before_update,after_find等回调?

回答

2

看看下面的宝石:

  • 康康舞
  • 设计
  • authlogic

,不要错过Ryan的大railscasts上述

+0

我没有意识到这是一个需要插件的东西 - 感谢提示。我相信我会去参加康康的插件。 – 2010-04-29 02:58:00

+0

我会建议你去authlogic。 :) – 2010-04-29 13:04:46

+0

你也许会考虑我的宝石,权威:https://github.com/nathanl/authority – 2012-04-20 18:22:24

2

这将给访问的人谁在地址栏中更改数值

@book = Book.find(params[:id]) 

但如果你去通过登录的用户轨(ActiveRecord的)的关系将自动更新SQL查询

@book = current_user.books.find(params[:id]) 
当然

这是假定你的书表有一个user_id列

0

嘿,我最近自己做了这个。要做到这一点最简单的方法是让页面上的编辑功能的显示,但方法柜面它如下列:

<%if current_user %> 
    <% if current_user.id == wishlist.user_id %> 
    <div id="text3"><%= link_to 'Edit', edit_wishlist_path(@wishlist) %></div><br /> 
    <%end%> 
    <%end%> 

这就是你所希望看到的?

+0

男人,这是一个古老的问题 - 我从那以后走过了很长的路。对于我现在的所有项目,我使用authlogic进行身份验证并可以进行授权。做一个快速的谷歌搜索其中任何一个 - 他们是美妙的图书馆,并会让你的生活更容易。 – 2012-03-08 01:33:38