2014-01-09 2 views
0

Я следую этому руководству http://blog.endpoint.com/2012/01/ruby-on-rails-rights-attributes.html, чтобы настроить механизм авторизации для моего приложения rails4.Полиморфная ассоциация в rails4

Я создал модель данных, но не управляю (из консоли), чтобы получить права (через метод all_rights) пользователя.

В модели пользователя, как объект пользователя может называть «self.rights», поскольку права доступны через RightAssignment, а не непосредственно от пользователя?

Мои модели:

class User < ActiveRecord::Base 
    has_many :right_assignments, as: :subject 
    has_and_belongs_to_many :groups 
    has_and_belongs_to_many :roles 

    def all_rights 
    rights = [self.rights + 
      self.groups.collect { |g| g.allowed_rights } + 
      self.roles.collect { |r| r.rights }] 
    rights = rights.flatten.uniq.collect { |r| r.action } 
    rights 
    end 
end 

class Group < ActiveRecord::Base 
    has_many :right_assignments, as: :subject 
    has_and_belongs_to_many :users 

    def allowed_rights 
    self.assignable_rights ? self.rights : [] 
    end 
end 

class Role < ActiveRecord::Base 
    has_many :right_assignments, as: :subject 
    has_and_belongs_to_many :users 
end 

class RightAssignment < ActiveRecord::Base 
    belongs_to :right 
    belongs_to :subject, polymorphic: true 
end 

class Right < ActiveRecord::Base 
    has_many :right_assignments 
end 

Любая идея?

ответ

1

вы можете использовать :through

class User < ActiveRecord::Base 
    has_many :right_assignments, as: :subject 
    has_many :rights, :through => :right_assignments 
    has_and_belongs_to_many :groups 
    has_and_belongs_to_many :roles 
Смежные вопросы