J'ai une application Rails où les utilisateurs ont des adhésions aux projets (et d'autres choses, polymorphiquement). Les utilisateurs ont également des rôles. Je souhaite que les projets Utilisateur # fonctionnent comme une recherche ActiveRecord normale, mais je souhaite également que les administrateurs aient accès à tous les projets.Comment contrôler les ressources de l'utilisateur, mais laisser les administrateurs tout voir?
Pendant un certain temps que je suis en train de faire ceci:
class User < ActiveRecord::Base
has_many :memberships, :dependent => :destroy
def projects
if has_role?(:admin)
Project.find(:all)
else
Project.find(:all, :include => :memberships, :conditions => ["memberships.user_id = ?", id])
end
end
end
class Project < ActiveRecord::Base
has_many :memberships, :as => :member, :dependent => :destroy
end
class Membership < ActiveRecord::Base
belongs_to :user
belongs_to :member, :polymorphic => :true
end
Mais je voudrais vraiment faire quelque chose plutôt comme ceci:
class User < ActiveRecord::Base
has_many :memberships, :dependent => :destroy
has_many :projects, :through => :memberships, :source => :member, :source_type => "Project"
end
pour que je puisse utiliser named_scope plus régulièrement (par exemple ' alfred.projects.recent.active '). Le
Cela fonctionne si vous ajoutez automatiquement de nouvelles adhésions pour les administrateurs, mais cela devient rapidement incontrôlable.
Je souhaite conserver l'interface des projets Utilisateur #. Quelle est la bonne piste ici?
Merci beaucoup.
Merci pour toutes les excellentes suggestions! Il existe peut-être un autre moyen d'attaquer ceci: existe-t-il un moyen simple de faire en sorte qu'un tableau d'objets ActiveRecord se comporte comme une association AR, de sorte que named_scope et find fonctionnent? c'est-à-dire des projets = Project.find (: all); projects.active.recent - Merci encore à tous! – scottburton11