खोज…
परिचय
लारवेल विशिष्ट संसाधनों पर उपयोगकर्ता कार्यों को अधिकृत करने का एक सरल तरीका प्रदान करता है। प्राधिकरण के साथ, आप चुनिंदा संसाधनों से उपयोगकर्ताओं को दूसरों तक पहुंच से वंचित करते हुए चुन सकते हैं। Laravel Gates
और Policies
का उपयोग करके उपयोगकर्ता प्राधिकरणों के प्रबंधन के लिए एक सरल एपीआई प्रदान करता है। Gates
AuthServiceProvider
का उपयोग करते हुए प्राधिकरण के लिए एक सरल क्लोजर आधारित दृष्टिकोण प्रदान करते हैं, जबकि Policies
आपको कक्षाओं के माध्यम से प्राधिकरण तर्क को व्यवस्थित करने की अनुमति देती हैं।
गेट्स का उपयोग करना
Gates
वे क्लोजर हैं जो यह निर्धारित करते हैं कि किसी उपयोगकर्ता को किसी संसाधन पर एक निश्चित कार्रवाई करने की अनुमति है या नहीं। Gates
को आमतौर पर AuthServiceProvider
के बूट विधि में परिभाषित किया गया है और AuthServiceProvider
यह क्या कर रहा है यह प्रतिबिंबित करने के लिए नाम दिया गया है। एक गेट का एक उदाहरण जो केवल प्रीमियम उपयोगकर्ताओं को कुछ सामग्री देखने की अनुमति देता है वह इस तरह दिखाई देगा:
Gate::define('view-content', function ($user, $content){
return $user->isSubscribedTo($content->id);
});
Gate
हमेशा पहले तर्क के रूप में एक उपयोगकर्ता का उदाहरण प्राप्त करता है, आपको गेट का उपयोग करते समय इसे पास करने की आवश्यकता नहीं होती है, और वैकल्पिक रूप से चिंता में एलोकेन्ट मॉडल जैसे अतिरिक्त तर्क प्राप्त कर सकते हैं।
गेट्स के साथ क्रियात्मक प्राधिकरण
उपयोगकर्ता से सामग्री छिपाने के लिए ब्लेड टेम्पलेट पर ऊपर दिए गए उदाहरण का उपयोग करने के लिए, आप आमतौर पर ऐसा कुछ करेंगे:
@can('view-content', $content)
<! -- content here -->
@endcan
सामग्री पर नेविगेशन को पूरी तरह से रोकने के लिए, आप अपने नियंत्रक में निम्न कार्य कर सकते हैं:
if(Gate::allows('view-content', $content)){
/* user can view the content */
}
OR
if(Gate::denies('view-content', $content)){
/* user cannot view content */
}
नोट: आपको इन विधि के लिए वर्तमान में प्रमाणित उपयोगकर्ता को पास करने की आवश्यकता नहीं है, लारवेल आपके लिए इसका ख्याल रखता है।
नीतियाँ
नीतियां एक वर्ग हैं जो आपको एक मॉडल संसाधन के आसपास प्राधिकरण तर्क को व्यवस्थित करने में मदद करती हैं। हमारे पिछले उदाहरण का उपयोग करते हुए, हमारे पास एक ContentPolicy
हो सकता है जो Content
मॉडल में उपयोगकर्ता की पहुंच का प्रबंधन करता है।
ContentPolicy
बनाने के लिए, ContentPolicy
एक कारीगर कमांड प्रदान करता है। बस चलाते हैं
php artisan make:policy ContentPolicy
यह एक खाली नीति वर्ग और app/Policies
फ़ोल्डर में जगह बनाएगा। यदि फ़ोल्डर मौजूद नहीं है, तो लारवेल इसे बनाएगा और कक्षा को अंदर रखेगा।
एक बार निर्मित होने के बाद, लारवेल को यह जानने में मदद करने के लिए नीतियों को पंजीकृत करने की आवश्यकता है कि मॉडल पर कार्रवाई को अधिकृत करते समय किन नीतियों का उपयोग किया जाए। AuthServiceProvider
के AuthServiceProvider
, जो सभी ताज़े AuthServiceProvider
प्रतिष्ठानों के साथ आता है, एक पॉलिसी प्रॉपर्टी है जो आपके शानदार मॉडल को उनके प्राधिकरण नीतियों में मैप करती है। आपको केवल मैपिंग को सरणी में जोड़ने की आवश्यकता है।
protected $policies = [
Content::class => ContentPolicy::class,
];
लेखन नीतियां
लेखन Policies
Gates
लिखने के समान पैटर्न का अनुसरण करती हैं। सामग्री अनुमति गेट को इस तरह नीति के रूप में फिर से लिखा जा सकता है:
function view($user, $content)
{
return $user->isSubscribedTo($content->id);
}
किसी मॉडल के लिए सभी प्राधिकरण मामलों की देखभाल के लिए नीतियों में आवश्यकतानुसार अधिक विधियाँ हो सकती हैं।
नीतियों को प्राधिकृत करना
उपयोगकर्ता मॉडल के माध्यम से
लारवेल यूजर मॉडल में दो विधियाँ हैं जो Policies
का उपयोग करके प्राधिकरणों की मदद करती हैं; can
और can't
। इन दोनों का उपयोग यह निर्धारित करने के लिए किया जा सकता है कि किसी उपयोगकर्ता के पास मॉडल पर प्राधिकरण है या नहीं।
यह जांचने के लिए कि कोई उपयोगकर्ता सामग्री देख सकता है या नहीं, आप निम्न कार्य कर सकते हैं:
if($user->can('view', $content)){
/* user can view content */
}
OR
if($user->cant('view', $content)){
/* user cannot view content */
}
मिडिलवेयर
Route::get('/contents/{id}, function(Content $content){
/* user can view content */
})->middleware('can:view,content');
वाया नियंत्रक
लारवेल एक सहायक विधि प्रदान करता है, जिसे authorize
किया जाता है जो नीति का नाम और संबद्ध मॉडल को तर्क के रूप में लेता है, और या तो आपके प्राधिकरण तर्क के आधार पर कार्रवाई को अधिकृत करता है या कार्रवाई से इनकार करता है और AuthorizationException
फेंकता है जिसे लारा अपवाद अपवाद हैंडलर 403 HTTP response
कनवर्ट 403 HTTP response
।
pubic function show($id)
{
$content = Content::find($id);
$this->authorize('view', $content);
/* user can view content */
}