Ben kurulum aşağıdaki modelleri ile rol tabanlı Geçiş Kontrol sistemi vardır:Modelde koşullu bir ilişki oluşturmak mümkün mü?
- Rol (STI gibi),
- UserRole (küresel roller)
- ProjectRole (proje spesifik roller)
- Atama (Farklı kaynaklarla Polimorfik)
- User
- Proj ect (ödevler için bir kaynak türü olarak)
Kullanıcıların, yalnızca belirli bir UserRole'ı varsa bir projeden sorumlu oldukları kabul edilir. Bu Userrole ismi "projelerinde sorumlu" ve iki Has_many dernekler vardır Kullanıcı modelinde kimliği 2.
sahiptir: responsible_assignments ve responsible_projects. Bu dernekler yalnızca kullanıcı UserRole "projelerden sorumlu" ID 2 ile varsa geçerlidir.
Sorumlu bir ilişki için derleme_ * ilişkilendirmesi kullanıcı modelinde oluşturulabilir ve bu tür bir kurulum için ortak bir yoldur. ilişkilerin
Bu tür sorunları çözmek için en iyi uygulama nedir?
class Role < ActiveRecord::Base
has_many :assignments
has_many :users, :through => :assignments
class UserRole < Role
class ProjectRole < Role
class Assignment < ActiveRecord::Base
belongs_to :user
belongs_to :role
belongs_to :resource, :polymorphic => true
class User < ActiveRecord::Base
has_many :assignments
has_many :roles, :through => :assignments,
:class_name => "UserRole"
has_many :responsible_assignments, :class_name => "Assignment",
:conditions => { :role_id => 4 } // specific project role
has_many :responsible_projects, :through => :responsible_assignments,
:source => :resource,
:source_type => 'Project',
:conditions => { :status => 1 } // project is active
...
class Project < ActiveRecord
...
bir koşullu dernek tarafından ne anlama geliyor ? Koşullar neler? – Yanhao
Durum: bir kullanıcının kimlik 2 ile bir rolü yoksa, sorumlu_ * ilişkilendirmeler geçerli değil/ayarlanmamalıdır. – tonymarschall