He fijado un sistema de acceso controll basado en roles con los siguientes modelos:¿Es posible crear una asociación condicional en el modelo?
- Rol (como infecciones de transmisión sexual),
- UserRole (roles globales) (roles específicos del proyecto)
- ProjectRole
- Asignación (polimórfico con diferentes recursos)
- Usuario
- Proj ect (como un tipo de recurso para asignaciones)
Los usuarios solo pueden ser responsables de un proyecto si tienen una UserRole específica. Este Userrole es el nombre "responsable de proyectos" y tiene ID 2.
En el modelo de usuario hay dos asociaciones has_many: responsible_assignments y responsible_projects. Estas asociaciones solo son válidas si el usuario tiene la UserRole "responsible for projects" con ID 2.
¿Es posible crear una asociación condicional en el modelo de usuario para la asociación responsible_ * y es esta una forma común de configurar este tipo? de las relaciones?
¿Cuál es la mejor práctica para resolver este tipo de problemas?
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
...
¿Qué quiere decir por una asociación condicional ? ¿Cuáles son las condiciones? – Yanhao
La condición es: si un usuario no tiene un rol con id 2, las asociaciones responsible_ * no son válidas/no deberían establecerse. – tonymarschall