ユーザーが他のユーザーをお気に入りとしてマークできるモデルがあります。この HABTM 関係は User モデルで定義されます。
class User < ActiveRecord::Base
has_and_belongs_to_many :favorites, :class_name => "User", :join_table => "favorites", :association_foreign_key => "favorite_id", :foreign_key => "user_id"
end
FavoritesController は、ユーザーのお気に入りを管理するために 3 つのアクション (index、create、destroy) のみを必要とします。
ルール: 認証されたユーザー (current_user) のみがお気に入りを管理できます。
最初に、authorization_rule.rb ファイルでこのルールを表現しようとしました。
# allow authenticated user to update profile
has_permission_on :users, :to => :change do
if_attribute :id => is { user.id }
has_permission_on :favorites, :to => [:index,:create,:destroy]
end
これはおそらく、Favorite に明示的なモデル (つまり、favorite.rb) がないために機能しませんでした。私はこれについて間違っているかもしれませんが。
FavoritesController でルールを表すのが正しいアプローチのようです。
filter_access_to :all, :nested_in => :users
...
しかし、ここでルールを適切に表現する方法がわかりません。
支援は本当に感謝しています。
** 編集 **
この状況では、コンテキストを使用してアクセスを制御することが提案されました: モデルのないコントローラーのアクセス許可を設定します。
FavoritesController を変更してみました:
filter_access_to :all, :context => :favorites
この変更は効果がありませんでした。
** /編集 **