2013-11-04 53 views

回答

6

讓我把水弄糊了一下。我更喜歡通過Role表和連接表UserRole。這樣我可以定義多個角色,而無需向db添加其他列/表。

class User 
    has_many :user_roles 
    has_many :roles, :through => :user_roles 

    def role?(role) 
    role_names.include? role 
    end 

    def role_names 
    @role_names ||= self.roles.map(&:name) 
    end 

    def role=(role) 
    self.roles << Role.find_or_create_by_name(role) 
    end 
end 

class UserRole 
    # integer: user_id, integer: role_id 
    belongs_to :user 
    belongs_to :role 
end 

class Role 
    # string: name 
    has_many :user_roles 
    has_many :users, :through => :user_roles 
end 
+1

我喜歡這個概念,因爲它增加了很多靈活性,如果需要的話。相反,當然,它是增加了複雜性... –

+0

因此,理論上,當使用這種方法不兼容的角色可以結合,我是對嗎? – DreamWalker

4

這實際上取決於你想要對你的管理員角色做什麼。我想說的第一個選擇是安全的,因爲管理角色本身就是一個獨特的模型。

第二個選項很簡單,可以幫助您最輕鬆地完成任務。但是,如果您的用戶找出布爾變量並設置它,則任何用戶都可以成爲管理員並訪問您不希望他們訪問的區域。