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