Я настроил систему управления доступом на основе ролей со следующими моделями:
Пользователи могут быть только разрешены нести ответственность за проект, если у них есть конкретная UserRole. Эта роль пользователя называется «ответственный за проекты» и имеет идентификатор 2.
В модели пользователя есть две ассоциации has_many: ответственные_ассигнменты и ответственные_проекты. Эти ассоциации действительны только в том случае, если у пользователя есть UserRole «ответственный за проекты» с ID 2.
Можно ли создать условную ассоциацию в пользовательской модели для ассоциации «ответственный_ *» и является ли это обычным способом установки такого рода отношений ?
Как лучше всего решать такие проблемы?
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
...