Domanda

Ho una relazione molti-a-molti in questo modo: Un utente organizzazioni has_many attraverso appartenenze e viceversa.

Sto usando le organizzazioni dichiarative e voglio solo un utente di modificare una particolare organizzazione, se è affiliato e l'attributo affiliationtype di appartenenza è un valore particolare.

Quindi, di carattere ha 3 colonne, user_id, organization_id e affiliationtype_id

che posso fare:

o = Organization.find(:first)
o.affiliatons[0].user and get the user

Ora desidero fare questo:

has_permission_on [:organizations], :to => :edit do
  if_attribute (...)
end

Questo if_attribute dovrebbe vedere se l'utente corrente è l'organization.affiliation [?]. Utente e se l'organization.affiliation [?]. Affiliationtype_id = "3"

Spero che questo è un problema di sintassi ... Ho davvero bisogno di ottenere questo lavoro.

È stato utile?

Soluzione

Modifica

È possibile limitare il tipo di affiliazione con intersects_with (e blocco) :

  has_permission_on [:organizations], :to => :edit do
    if_attribute :affiliations => intersects_with {
      user.affiliations.with_type_3
    }
  end

Perché non creare un named_scope per trovare le affiliazioni cui affiliationtype_id = 3?


Da documentazione declarative_authorization :

per ridurre la ridondanza in blocchi has_permission_on, una regola può dipendere da autorizzazioni per gli oggetti associati:

authorization do
  role :branch_admin do
    has_permission_on :branches, :to => :manage do
      if_attribute :managers => contains {user}
    end

    has_permission_on :employees, :to => :manage do
      if_permitted_to :manage, :branch
      # instead of
      #if_attribute :branch => {:managers => contains {user}}
    end
  end
end
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top