我如何在活动管理员和 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
一个棘手的解决方案可以概括这一点,并使用委托类作为代理来取消超级管理员的所有模型的范围。我可以根据要求拼出。