使用主动管理员cancan进行范围界定

如何使用活动管理员和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 

如果您希望superadmin访问所有post,您可以使用: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 

一个棘手的解决方案可以概括这一点并使用委托者类作为代理来取消所有模型的superadmins。 我可以根据要求拼出来。