【发布时间】:2015-03-21 13:42:10
【问题描述】:
我有 Admin 和 Partner 模型。 Partner has_many Services。我正在使用设计和 CanCanCan。我在application_controller 中设置了我的默认值:
# This is for changing defaults for CanCanCan
def current_ability
if admin_signed_in?
@current_ability ||= Ability.new(current_admin)
elsif partner_signed_in?
@current_ability ||= Ability.new(current_partner)
end
end
现在在我的Abilities 班级里:
case model
# if model is Admin
when Admin
can :manage, :all
# if model is Partner
when Partner
can :read, Partner, id: model.id
can :manage, Service, partner_id: model.id, partner: {active: true}
can :create, Service
can :update, Partner, id: model.id, active: true
else
cannot :read, :all
end
model 是我创建的参数,而不是旧的user。我在视图中放置了很多if can? 条件。
现在问题来了:根据谁登录,如何结合Devise 和CanCanCan 限制对pages and controllers 的访问?
我想我会为每个控制器添加类似的东西:
before_action :check_logged_in
def check_logged_in
if partner_signed_in?
# do something
elsif admin_signed_in?
# do something
end
end
但这会使CanCanCan 变得毫无用处,并且如果我有太多控制器将难以维护。
我认为我应该为我的控制器使用load_and_authorize_resource,但我只有Admin和Partner具有设计授权的模型,并且有很多模型的控制器不需要任何授权甚至没有模型.
【问题讨论】:
-
我们指的是服务页面?或者还有其他型号吗?
-
是的,合作伙伴有很多服务并且可以创建它们。我认为未来会有更多的模型
标签: ruby-on-rails ruby devise cancan