2013-03-18 76 views
0

我正在嘗試進行設置,以便用戶在單擊不屬於他們的配置文件的編輯時將收到「未經授權」的消息。這個消息當然不應該出現在管理員身上,因爲管理員可以編輯所有配置文件。我之前在Permission.rb上完成了這個工作,但是我擺脫了這個文件,使用了更基本的用戶角色/授權。拒絕未經授權的用戶編輯配置文件

我看不到我如何實現我以前在Permission.rb上的當前文件。我嘗試了一些解決方案,但他們不加起來。如果有人能指出我會朝好的方向發展。此外,我正在從頭開始,用戶認證/授權。

index.html.erb:

<% @users.each do |user| %> 
    <li> 
     <% if current_user.admin? || current_user == @user %> 
     <% end %> 
     <%= link_to "Edit #{user} profile", user %> 

      | <%= link_to "delete", user, method: :delete, 
              data: { confirm: "You sure?"} %> 
     </li> 
     <% end %> 
+0

抱歉,我認爲我今天早上做了這件事,但這是另一個問題。感謝您指出。 – pwz2000 2013-03-18 15:13:28

+0

在答案的最後看看我的編輯。你很快就把你的'<% end %>'放了。 – Zippie 2013-03-18 15:21:25

回答

1

你爲什麼讓用戶有機會來編輯其他人的個人資料?

首先,您應該在視圖中有一個if聲明,在該聲明中顯示編輯頁面的鏈接。我想這是顯示在每個用戶的個人資料,所以我想在你的控制器代碼是這樣的:

def show 
    @user = User.find(params[:id]) 
end 

然後在你看來,你應該有這樣的事情:

<% if current_user.admin? || current_user == @user %> 
    <%= link_to 'Edit Profile' , edit_user_path(@user) %> 
<% end %> 

還有一種情況下,如果有人試圖「迫使」他們的方式,就像試圖鍵入URL www.yourapplication.com/users/6/edit你可以寫在你的控制器一個before_filter方法:

before_filter :check_privileges, only => [:edit, :update] 

然後寫在名爲check_privileges

def check_privileges 
    unless current_user.admin? || current_user.id == params[:id] 
    flash[:warning] = 'not authorized!' 
    redirect_to root_path 
    end 
end 

編輯的方法:提問編輯自己的代碼後,我展示的錯誤:

你把end太快:

<% @users.each do |user| %> 
    <li> 
     <%= link_to user.name, user %> 
     <% if current_user.admin? || current_user == @user %> 
      <%= link_to "Edit #{user} profile", user %> 
      | <%= link_to "delete", user, method: :delete, 
              data: { confirm: "You sure?"} %> 
     <% end %> 
    </li> 
<% end %> 
+1

最重要的是,我建議看看這本在線書,更具體的這一部分:http://ruby.railstutorial.org/chapters/updating-showing-and-deleting-users#sec-authorization – gabrielhilal 2013-03-18 14:42:37

+0

很好的資源! :) – Zippie 2013-03-18 14:44:52

+0

我還沒有添加權限部分。但是,如果用戶沒有登錄,你的第一個解決方案似乎只能阻止用戶查看/用戶頁面。如果用戶已登錄,他仍然可以編輯配置文件,即使它是別人的。我現在設置頁面的方式是去/ users並列出所有註冊用戶。在該頁面上,您可以點擊用戶名,它會帶您到/用戶/ ID,您可以在其中查看/編輯配置文件(我還沒有創建一個僅輸出配置文件信息的模板)。因此,它應該做的不是讓任何不是所有者的人查看/編輯配置文件。 – pwz2000 2013-03-18 15:11:02