0

ユーザーがログインすると、レコードを作成したユーザーのみが自分のレコードを破棄できます。以下のコードに何を追加すればよいですか??

  def destroy

    @topic = Topic.find(params[:id])
    @topic.destroy
    flash[:notice] = "topic deleted!"

  end
4

1 に答える 1

1

あなたが探しているのは、実際には工夫ではなく、CanCanのような認証ソリューションです。

Devise はユーザーを認証し、ユーザーがログインしてアクティブであることを確認することしかできません。必要なのは、ユーザーがこのトピックを削除する権利を持っているかどうかを判断する方法です。

もちろん、次のように自分でロールすることもできます。

  def destroy
    @topic = Topic.find(params[:id])
    if @topic.user_id == current_user.id
      @topic.destroy
      flash[:notice] = "topic deleted!"
    else
      flash[:error] = "not allowed"
    end
  end

belongs_to :creator, :class_name => :user(コードは、トピックに関連付けが設定されていることを前提としています..しかし、アイデアはわかります)。

しかし、CanCanのようなものを使用すると、作業がずっと楽になり、コードは次のようになります。

  def destroy
    @topic = Topic.find(params[:id])
    authorize! :destroy, @topic
    @topic.destroy
    flash[:notice] = "topic deleted!"
  end

アビリティ ファイル (アビリティの定義を参照) を次のように設定します。

can :manage, Topic, :owner_id => user.id
于 2012-07-09T14:37:37.913 に答える