1


1

新しいが関連するオブジェクトIDに対するdeclarative_authorizationパーミッションはnilです

has_many Affiliationsという組織とhas_oneという組織がある

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

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 # on #

ミッションと組織はゼロです。 それは、新しい組織にはMission.Organizationが存在しないからだと思います。

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

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

1 Answer


1


なぜあなたのテクニックがうまくいかないのかは話せませんが、ここで私が同様のことを成し遂げた方法を紹介します。

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

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}}}