2012-07-21 73 views
0

從我所瞭解的情況來看,如果我要讓我的用戶模型中的管理布爾值列在attr_accessible中,將會產生安全漏洞。不過,我希望在我的顯示頁面上有一個鏈接,讓現有管理員用戶將管理權限授予其他用戶。我想知道如何去做這件事?我在我的節目視圖代碼爲目前用戶包括:通過一個按鈕使用戶通過一個按鈕,而不具有在Rails中可訪問的屬性

<% if current_user.admin? && @user.admin == false %> 
    <%= link_to "Make Administrator", '#', 
    data: { confirm: "Make this user an admin?" }, class: "btn btn-large btn-primary" %> 
    <% elsif current_user.admin? && @user.admin%> 
    <%= link_to "Remove Administrator", '#', class: "btn btn-large btn-danger" %> 
    <% end %> 

我不完全知道該怎麼放,而不是「#」? @ user.toggle!(:admin)似乎不工作,所以任何指針將不勝感激。先謝謝你!

回答

2

首先,因爲這是一個動作,這應該是一個按鈕,而不是一個鏈接。

<%= button_to user_path(@user), :method => :put ... %> 

控制器代碼

def update 
if params[:admin] 
    user.update_attribute(:admin, true) 
    redirect_to ... 
end 
... 
end 

,或者如果你喜歡保持你的邏輯模型

def update 
... 
if params[:admin] 
    @user.make_admin 
end 
... 
end 

型號代碼

def make_admin 
self.update_column(:admin, true) 
end 
+0

好,我想這和它的不工作,雖然我確實得到了要做的事情...當我嘗試更新管理員時,它只是重定向到根路徑而不是返回到用戶索引。我將在一個勾號中發佈我的代碼。非常感謝你的幫助! – TangoKilo 2012-07-21 20:25:51

+0

哎呀,我的壞它重新導向,因爲之前我使用的過濾器。我的壞 – TangoKilo 2012-07-21 20:38:21

+0

不用擔心,我很高興一切正常。簡單地說,update_attribute不會發出保存事件,所以它不檢查attr_accessible。與.update_column相同。如果你想讓它檢查屬性,出於安全原因,你可以分別使用update_attributes和self.attribute = *。 – AdamCooper86 2012-07-22 12:42:03

相關問題