ユーザーがログインすると、レコードを作成したユーザーのみが自分のレコードを破棄できます。以下のコードに何を追加すればよいですか??
def destroy
@topic = Topic.find(params[:id])
@topic.destroy
flash[:notice] = "topic deleted!"
end
ユーザーがログインすると、レコードを作成したユーザーのみが自分のレコードを破棄できます。以下のコードに何を追加すればよいですか??
def destroy
@topic = Topic.find(params[:id])
@topic.destroy
flash[:notice] = "topic deleted!"
end
あなたが探しているのは、実際には工夫ではなく、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