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

これらの gem を一緒に使用する方法については、 Railscast - #188を参照してください。

====== 質問情報更新後: ======

「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

環境に合わせてカスタマイズする必要がありますが、解決策を導くはずです。

CanCan の使用については、 Railscast - 192を参照してください。

于 2012-12-19T11:56:55.397 に答える