2010-04-29 426 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