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 %>
4

1 に答える 1

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 %>

また、コントローラにメソッドをwww.yourapplication.com/users/6/edit記述できるURL を入力しようとするのと同じように、誰かが「強制」しようとする場合もあります。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 %>
于 2013-03-18T14:16:00.840 に答える