2013-11-04 8 views
6

बनाम मैं जानता हूँ कि एक व्यवस्थापक भूमिका/उपयोगकर्ता बनाने के लिए कैसे: https://github.com/plataformatec/devise/wiki/How-To:-Add-an-Admin-roleरेल वसीयत - व्यवस्थापक भूमिका, मॉडल विशेषता

क्या मैं हालांकि सोच रहा हूँ पर विचार करने के लिए कि क्या कोई लाभ या दो विकल्प को नुकसान कर रहे हैं होता है जब बीच तय उन्हें। क्या कोई इस पर कोई अंतर्दृष्टि प्रदान कर सकता है?

उत्तर

6

मुझे पानी को थोड़ा सा हल करने दें। मैं इसे Role तालिका और एक तालिका तालिका UserRole के माध्यम से पसंद करता हूं। इस तरह मैं डीबी में एक और कॉलम/टेबल जोड़ने के बिना एक से अधिक भूमिका परिभाषित कर सकता हूं।

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

यह वास्तव में इस बात पर निर्भर करता है कि आप अपनी व्यवस्थापक भूमिका के साथ क्या करना चाहते हैं। पहला विकल्प, मैं कहूंगा कि थोड़ा सा सुरक्षित है क्योंकि व्यवस्थापक भूमिका स्वयं में एक अद्वितीय मॉडल है।

दूसरा विकल्प सरल है और आपको कम से कम प्रयास करने में मदद करेगा। हालांकि, यदि आपके उपयोगकर्ता बुलियन वैरिएबल और इसे सेट करने का एक तरीका समझते हैं, तो कोई भी उपयोगकर्ता व्यवस्थापक बन सकता है और उन क्षेत्रों तक पहुंच सकता है जिन्हें आप नहीं चाहते हैं।

संबंधित मुद्दे