2010-07-05 108 views
1

我想顯示一個表單,其中每個用戶可以編輯不同的字段。Rails:可編輯/不可編輯的字段取決於用戶權限

目前,代碼如下:

<% if can? :update, item %> 
` <%= f.text_field :title %> 
<% else %> 
    <%=h f.object.title %> 
<% end %> 

我可以在一系列幫手(每個字段類型)封裝,但我也有在控制器檢查用戶是否可以更新所有提交的字段(如果惡意用戶試圖提交他未被授權的字段)。

這種類型的任務在軌道中是否有更清晰的模式?理想情況下,我想在模型中定義這些訪問權限,並將這些更改傳播到控制器和視圖。

編輯:

使用readonly標籤是不是一個可行的選擇;它不考慮驗證,並用很多CSS替換視圖邏輯。不是最好的折衷。

回答

0

你可以讓他們只讀

<%= f.text_field :title, :readonly=> (can? :update, item)? true : false %> 
+0

這只是化妝品;這取決於你是否更喜歡編寫大量的CSS(將只讀類型的控件設置爲純文本樣式),還是喜歡在視圖中使用一些額外的邏輯。 而且它沒有解決控制器端驗證問題。 – shmichael 2010-07-05 14:27:26

0

看看在acl9插件授權。

+0

據我所知,它與聲明性授權或cancan沒有區別:我仍然必須在控制器/視圖中實現所有各種邏輯。 – shmichael 2010-07-06 07:05:35

+0

是的。我意識到你已經在使用自動化框架。我想沒有逃避控制器的條件檢查。 – 2010-07-06 07:23:53

0

我不相信的時候那裏有沒有辦法跟一個插件來解決這個問題,唯一的選擇是將控制器代碼更改爲:

@model=Model.new 
@model.field = params[:model][:field] if can? .... 
@model.save