1

我只是不确定这种方法。其实我有这种情况:

User belongs_to Organization
Organization has_many User

Organization has_many MembershipCard
MembershipCard belongs_to Organization

现在,用户只有在设置 Organization = User.organization 时才允许创建新的 MembershipCard(请注意,具有更高权限的用户没有此限制)。

目前我在控制器上处理所有事情,但是我正在考虑制作一个验证器来确保Organization == current_user.Organization (UserSession.find.user)

这是个好主意吗?这对我来说看起来不错,但我真的很害怕没有充分的理由几乎不打破 MVC 模式。

4

1 回答 1

1

这是您思考授权以及不仅仅是身份验证(authlogic)的完美时间/地点/示例。
使用 gem declarative_authorization可以轻松做到这一点。您可以简单地在授权规则中指定规则

authorization do
  role :user do
    has_permission_on :membership_cards, :to => :create do
      if_attribute :organization => is {user.organization}
    end
  end
end

请参阅Railscast - #188关于一起使用这些 gem。

====== 更新问题信息后:======

“CanCan 的灵感来自 declarative_authorization 和 aegis”——来自 github-cancan

我查了一下,你将如何用 CanCan 定义这样的规则,页面上有一个片段定义了 CanCan 的能力

class Ability
  def initialize(user)
    user ||= User.new # guest user (not logged in)
    can :create, MembershipCard do |card|
      card.organization.user == user
    end
  end
end

您仍然需要根据您的环境对其进行自定义,但它应该会引导您找到解决方案。

请参阅Railscast - 192关于使用 CanCan。

于 2012-12-19T11:56:55.397 回答