1

私は複数の所属を持つ組織と、1 つの組織を持つ使命を持っています。

だから私はこれを行うことができます:

m = Mission.first
m.organization.affiliations

ユーザーには has_many のアフィリエーションもあるため、次のことができます。

u = User.first
u.affiliations

declarative_authorization では、ミッションの組織に所属しているユーザーがミッションを管理できるようにしたいと考えています。私はこれを持っています:

has_permission_on :missions, :to => [:manage] do
  if_attribute :organization => { :affiliations => intersects_with { user.affiliates.type_admin } }
end

しかし、私はこのエラーが発生しています:

Permission denied: new not allowed for #<User id: 2, firstname: "Miguel", lastname: "Alho", email: "blah@blah.com", birthday: "2010-07-05 20:24:00", crypted_password: "...", password_salt: "...", persistence_token: "...", perishable_token: "...", created_at: "2010-03-05 20:25:34", updated_at: "2010-03-30 15:45:36"> on #<Mission id: nil, user_id: nil, organization_id: nil, name: nil, objectives: nil, created_at: nil, updated_at: nil>

ミッションと組織はゼロです。それは、ミッション・オーガニゼーションが存在しないからだと思います。

ミッションコントローラーにはこれがあります:

  def new
    if(params[:organization_id])
      session[:organization_id] = params[:organization_id]
      @mission = Organization.find_by_id(params[:organization_id]).missions.build
    end  
  end
4

1 に答える 1

1

なぜあなたのテクニックが機能しないのかはわかりませんが、同様のことを達成した方法を次に示します.

コード例で収集したものから、ミッションの組織に所属するユーザーのみがそのミッションを管理できるようにする必要があります。さらに、そのユーザーは管理者タイプである必要があります。私が過去に行ったことは、組織モデルに has_many 関係を作成することでした。これには、管理者タイプではないアフィリエーションを除外するいくつかの追加条件があります。

has_many :admins, :source => :user, :through => :affiliations, :conditions => "affiliations.type = 'admin'"

次に、authorization_rules.rb に次のルールを追加します。

has_permission_on :missions, :to => [:manage] do { if_attribute :organization => {:admins => contains {user}}}
于 2010-04-17T16:34:03.340 に答える