मैं एक रेल वेब एप्लिकेशन पर काम कर रहा हूं, और वर्तमान में इसका उपयोग कुछ 20 उपयोगकर्ताओं द्वारा किया जा रहा है।वेब एप्लिकेशन के लिए जुर्माना प्राधिकरण को लागू करने का सबसे अच्छा तरीका?
एप्लिकेशन के कुछ हिस्सों केवल कुछ उपयोगकर्ताओं द्वारा ही पहुंच योग्य हैं, इसलिए हमारे पास पहले से ही एक बुनियादी प्राधिकरण ढांचा है, जिसे मैंने act_as_authenticated प्लगइन का उपयोग करके लागू किया है।
उपयोगकर्ता के विशेषाधिकार इस बात पर निर्भर करते हैं कि वे किस विभाग में काम करते हैं, इसलिए उदाहरण के लिए प्रशासन के पास आवेदन के सभी हिस्सों तक पहुंच है, जबकि लेखांकन के पास केवल लेखांकन से संबंधित भागों तक पहुंच है, और बिक्री केवल बिक्री से संबंधित है भागों, आदि
दूसरी तरफ, उपयोगकर्ता उन कार्यों के लिंक देखते हैं जिनके लिए उनके पास अपर्याप्त विशेषाधिकार हैं। उदाहरण के लिए, बिक्री विभाग में उन लोगों को मुख्य मेनू में वित्तीय रिकॉर्ड का एक लिंक दिखाई देता है, लेकिन जब वे उस पर क्लिक करते हैं, तो कुछ भी नहीं होता है। ऐसा इसलिए है क्योंकि AFAIK act_as_authenticated का उपयोग कर उपयोगकर्ता विशेषाधिकारों से पूछने का कोई प्रभावी तरीका नहीं है।
मैं दो तरीकों से बदलना चाहते हैं:
मैं और अधिक सुक्ष्म प्राधिकरण को पेश करना चाहते हैं। वर्तमान में, प्रमाणीकरण नियंत्रक स्तर पर किया जाता है। मैं इसे क्रिया या मॉडल स्तर पर करना चाहता हूं। उदाहरण के लिए, मैं चाहता हूं कि बिक्री विभाग में भुगतान करने और अपडेट करने में सक्षम हों, लेकिन उन्हें हटाएं।
मैं उपयोगकर्ता विशेषाधिकारों को कुशलता से पूछने में सक्षम होना चाहता हूं, इसलिए मैं इंटरफ़ेस से अनावश्यक (और भ्रमित) लिंक हटा सकता हूं।
आपको यह लागू करने का सबसे शानदार तरीका क्या है?
रेल-विशिष्ट उत्तरों आवश्यक नहीं हैं, मैं सिर्फ यह जानना चाहता हूं कि डेटा-संचालित एप्लिकेशन में इसे कैसे कार्यान्वित किया जाना चाहिए।
अंत में, यहाँ है कि यह कैसे वर्तमान में लागू है:
def authorized?
current_user.role.foo? or current_user.role.bar?
end
और यहाँ मेरी प्रारंभिक विचार है, जो मुझे लगता है कि इस को हल करने के लिए सबसे अच्छा तरीका नहीं है:
+------------+------------+---------+ | department | controller | action | +------------+------------+---------+ | accounting | payments | index | | accounting | payments | new | | accounting | payments | create | | accounting | payments | edit | | accounting | payments | update | | accounting | payments | destroy | | sales | payments | new | | sales | payments | create | | sales | payments | edit | | sales | payments | update | +------------+------------+---------+
या
+------------+----------+-------+--------+------+--------+--------+ | department | model | list | create | read | update | delete | +------------+----------+-------+--------+------+--------+--------+ | accounting | payments | TRUE | TRUE | TRUE | TRUE | TRUE | | sales | payments | FALSE | TRUE | TRUE | TRUE | FALSE | +------------+----------+-------+--------+------+--------+--------+
मेरे पास पहले से ही एक विभाग तालिका है, और उपयोगकर्ता_डिमेंट्स तालिका है। मैंने ब्रेवटी के लिए उदाहरण तालिका को सरल बना दिया। –