C# अकादमी · पाठ

कस्टम प्राधिकरण आवश्यकताएँ

कस्टम आवश्यकताएँ और हैंडलर बनाएँ।

पाठ 4, कुल 4 में से13 चरण

कस्टम प्राधिकरण आवश्यकताएँ, CoddyKit पर C# अकादमी का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह C# अकादमी सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C# अकादमी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

जब अंतर्निहित सुविधाएँ पर्याप्त न हों

कुछ नियमों को RequireRole या RequireClaim के साथ व्यक्त नहीं किया जा सकता—उदाहरण के लिए, "आयु कम से कम 18 वर्ष होनी चाहिए" या "इस संसाधन का स्वामी होना चाहिए"।

इनके लिए आप एक कस्टम आवश्यकता और एक कस्टम हैंडलर लिखते हैं।

// Rule: user must be older than a configurable minimum age

IAuthorizationRequirement

आवश्यकता एक ऐसा संकेतक है जिसमें नियम का डेटा होता है। यह खाली IAuthorizationRequirement इंटरफ़ेस को लागू करती है।

public class MinimumAgeRequirement : IAuthorizationRequirement
{
    public int MinimumAge { get; }
    public MinimumAgeRequirement(int minimumAge) =>
        MinimumAge = minimumAge;
}

AuthorizationHandler

हैंडलर में तर्क होता है। AuthorizationHandler<TRequirement> से व्युत्पन्न करें और HandleRequirementAsync को ओवरराइड करें।

public class MinimumAgeHandler
    : AuthorizationHandler<MinimumAgeRequirement>
{
    protected override Task HandleRequirementAsync(
        AuthorizationHandlerContext context,
        MinimumAgeRequirement requirement)
    {
        // logic goes here
        return Task.CompletedTask;
    }
}

आवश्यकता को सफल करना

हैंडलर के भीतर उपयोगकर्ता के दावों की जाँच करें। यदि नियम पूरा हो जाता है, तो context.Succeed(requirement) कॉल करें। यदि पूरा नहीं होता, तो इसे कॉल किए बिना सीधे लौट जाएँ।

var dobClaim = context.User.FindFirst("birthdate");
if (dobClaim is null) return Task.CompletedTask;

var dob = DateTime.Parse(dobClaim.Value);
int age = DateTime.UtcNow.Year - dob.Year;
if (dob > DateTime.UtcNow.AddYears(-age)) age--;

if (age >= requirement.MinimumAge)
    context.Succeed(requirement);

return Task.CompletedTask;

Succeed करें, Fail नहीं

नियम पूरा होने पर Succeed कॉल करना और अन्यथा कुछ न करना बेहतर है। context.Fail() को केवल तब कॉल करें जब आप उसी आवश्यकता के अन्य हैंडलर के बावजूद विफलता सुनिश्चित करना चाहते हों।

// Soft: let other handlers also try
if (ok) context.Succeed(requirement);

// Hard: force failure no matter what
if (blocked) context.Fail();

हैंडलर पंजीकृत करना

हैंडलर को DI में IAuthorizationHandler के रूप में पंजीकृत करें। आमतौर पर वे सिंगलटन होते हैं, जब तक कि वे सीमित-दायरे वाली सेवाओं पर निर्भर न हों।

builder.Services.AddSingleton<
    IAuthorizationHandler, MinimumAgeHandler>();

नीति से जोड़ना

AddRequirements (या Requirements.Add) का उपयोग करके आवश्यकता को नामित नीति में जोड़ें। हैंडलर का मिलान प्रकार के आधार पर अपने-आप हो जाता है।

builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("AtLeast18", policy =>
        policy.AddRequirements(new MinimumAgeRequirement(18)));
});

नीति का उपयोग करना

इसे किसी भी अन्य नामित नीति की तरह लागू करें।

[Authorize(Policy = "AtLeast18")]
[HttpGet("age-restricted")]
public IActionResult Restricted() => Ok();

संसाधन-आधारित प्राधिकरण

किसी विशिष्ट उदाहरण के आधार पर प्राधिकरण करने के लिए, जैसे "केवल दस्तावेज़ का स्वामी ही संपादन कर सकता है", संसाधन वाला ओवरलोड उपयोग करें। संसाधन हैंडलर संदर्भ में भेजा जाता है।

public class OwnerHandler
    : AuthorizationHandler<OwnerRequirement, Document>
{
    protected override Task HandleRequirementAsync(
        AuthorizationHandlerContext context,
        OwnerRequirement requirement,
        Document resource)
    {
        var userId = context.User.FindFirstValue(
            ClaimTypes.NameIdentifier);
        if (resource.OwnerId.ToString() == userId)
            context.Succeed(requirement);
        return Task.CompletedTask;
    }
}

IAuthorizationService कॉल करना

संसाधन-आधारित जाँच इंजेक्ट की गई IAuthorizationService के माध्यम से किसी क्रिया के भीतर सीधे चलती हैं।

public async Task<IActionResult> Edit(int id)
{
    var doc = await _db.Documents.FindAsync(id);
    var result = await _authz.AuthorizeAsync(
        User, doc, "DocumentOwner");
    if (!result.Succeeded) return Forbid();
    return Ok(doc);
}

प्रत्येक आवश्यकता के लिए कई हैंडलर

किसी आवश्यकता के कई हैंडलर हो सकते हैं; यदि कोई भी हैंडलर सफल हो जाता है, तो आवश्यकता पूरी मानी जाती है। इससे OR शर्तों को साफ़-सुथरे ढंग से मॉडल किया जा सकता है (जब तक कोई हैंडलर Fail कॉल न करे)।

// e.g. allow if owner OR if admin role
services.AddSingleton<IAuthorizationHandler, OwnerHandler>();
services.AddSingleton<IAuthorizationHandler, AdminOverrideHandler>();

त्वरित जाँच

हैंडलर के बारे में अपनी समझ का परीक्षण करें।

पुनरावलोकन

आपने कस्टम प्राधिकरण बनाया:

  • IAuthorizationRequirement नियम का डेटा रखता है।
  • AuthorizationHandler<T> तर्क रखता है और Succeed कॉल करता है।
  • हैंडलर को IAuthorizationHandler के रूप में पंजीकृत करें और आवश्यकता को किसी नीति से जोड़ें।
  • संसाधन-आधारित हैंडलर और IAuthorizationService विशिष्ट उदाहरणों के लिए प्राधिकरण करते हैं।

इससे प्राधिकरण पाठ्यक्रम पूरा होता है।

शुरुआत निःशुल्क

एआई शिक्षक के साथ C# सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
93
पाठ
346

अक्सर पूछे जाने वाले प्रश्न

क्या “कस्टम प्राधिकरण आवश्यकताएँ” पाठ निःशुल्क है?

हाँ—“कस्टम प्राधिकरण आवश्यकताएँ” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और C# अकादमी पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। C# अकादमी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“कस्टम प्राधिकरण आवश्यकताएँ” में मैं क्या सीखूँगा?

कस्टम आवश्यकताएँ और हैंडलर बनाएँ। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C# अकादमी का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या C# अकादमी शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C# अकादमी शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।

“कस्टम प्राधिकरण आवश्यकताएँ” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस C# अकादमी पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर C# अकादमी पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. भूमिका-आधारित प्राधिकरण
  2. क्लेम-आधारित प्राधिकरण
  3. नीति-आधारित प्राधिकरण
  4. कस्टम प्राधिकरण आवश्यकताएँ
← C# अकादमी पर वापस जाएँ