2013-05-03 5 views
0

블로그 앱에서 선언적 권한을 구현했습니다. 이제 관리자, 인증 된 사용자 및 게스트 사용자에 대해 각각 3 가지 레이아웃이 있습니다. 그래서 특정 유형의 사용자가 특정 시간에 앱을 사용하고 있는지 확인해야합니다. 우리는 사용자 모델, 역할 모델 및 할당 모델을 가지고 있습니다.사용자가 Decalarative Authorization을 가진 Admin인지 Not인지 확인

User.rb

class User < ActiveRecord::Base 

    attr_accessible :login, :email, :password, :password_confirmation, :role_ids 

    has_many :articles 
    has_many :comments 
    has_many :assignments 

    has_many :roles, :through => :assignments 

    def role_symbols 
    roles.map do |role| 
     role.name.underscore.to_sym 
    end 
    end 

    acts_as_authentic do |c| 
    c.login_field = :login 
    end 

    def deliver_password_reset_instructions! 
    reset_perishable_token! 
    Notifier.deliver_password_reset_instructions(self) 
    end 

end 

Assignment.rb

class Assignment < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :role 
end 

Role.rb

class Role < ActiveRecord::Base 
    attr_accessible :name 
    has_many :assignments 
    has_many :users, :through => :assignments 
end 

모든 솔루션?

+0

모델이 정확히 어떻게 생겼습니까? 협회? 한 사용자는 항상 하나의 역할 만 갖고 있습니까? – Mattherick

+0

예. 나는 그 질문을 갱신 할 것이다. –

답변

0

이 보석으로 구조를 단순화 할 수 있습니다 : https://github.com/platform45/easy_roles 는 GitHub의의 지침에 따라이 기술과 같은 모델을 수정합니다. 정말 쉽습니다. 단지 몇 단계 만 거치면됩니다. 사용자 모델 만 있으면됩니다.

또한 깡통 보석 (https://github.com/ryanb/cancan)을 권해드립니다.

easy_roles와 cancan은 역할과 권한을 아주 쉽게 정의 할 수있는 좋은 조합입니다!

+0

현재 모델 구성 옵션이 없습니다? –

+0

물론 그렇습니다.하지만 약간 까다로워 질 것이라고 생각합니다. 각 역할에 대해 true 또는 false를 반환하는 메소드를 정의 할 수 있습니다 (예 : def admin? current_user.roles.include? ("관리자 ID") 끝. 나머지 모든 역할에 대해 비슷합니다. def has_roles? (roles_as_array) current_user.roles.include? (roles_as_array with some magic)와 같이 일반적인 메소드를 생성 할 수도 있습니다. 내가 조금 까다 롭다는 뜻을 이해합니까? :) – Mattherick