アクティブな管理者とcancanでスコーピングを使用するにはどうすればよいですか。私には管理者ユーザーがいて、それらは機関と(has_one)関係があり、機関には多くのプロファイルがあります。管理者ユーザーがログインすると、同じ機関を持つすべてのプロファイルを表示したいと思います。
次のリンクはあまり役に立ちません。
http://activeadmin.info/docs/2-resource-customization.html#scoping_the_queries
アクティブな管理者とcancanでスコーピングを使用するにはどうすればよいですか。私には管理者ユーザーがいて、それらは機関と(has_one)関係があり、機関には多くのプロファイルがあります。管理者ユーザーがログインすると、同じ機関を持つすべてのプロファイルを表示したいと思います。
次のリンクはあまり役に立ちません。
http://activeadmin.info/docs/2-resource-customization.html#scoping_the_queries
これだけやったら問題ないの?
# ability.db
def initialize(user)
case
# ...
when user.super_admin?
can :manage, :all
when user.admin?
can :manage, Profile, :institution_id => user.institution.id
#
# ...
end
これは許可します: Profile.accessible_by(current_user)
、ここでは同じですcurrent_user.profiles
class AdminUser
has_one :institution
has_many :profiles, :through => :institution
end
ActiveAdmin.register Profile do
scope_to :current_user #here comes the variable which set in initializer
end
スーパー管理者にすべての投稿へのアクセスを許可する場合は、:association_method オプションを使用できます。
ActiveAdmin.register Profile do
scope_to :current_user, :association_method => :admin_profiles
end
# in class User
def admin_profiles
if super_admin?
Profile.unscoped
else
profiles
end
end
これを一般化して、デリゲータ クラスをプロキシとして使用し、スーパー管理者のすべてのモデルのスコープを解除するトリッキーなソリューションがあります。リクエストに応じて綴ることができます。