Role-based এবং Policy-based Authorization

Microsoft Technologies - ডট নেট কোর (Dot.Net Core) Authentication এবং Authorization |
211
211

ASP.NET Core-এ Authorization হল একটি গুরুত্বপূর্ণ নিরাপত্তা প্রক্রিয়া যা ব্যবহারকারীদের নির্দিষ্ট রিসোর্স বা অ্যাপ্লিকেশনে অ্যাক্সেস প্রদান বা অস্বীকার করে। দুটি প্রধান ধরনের Authorization পদ্ধতি রয়েছে: Role-based Authorization এবং Policy-based Authorization। চলুন, এগুলোর বিস্তারিত সম্পর্কে জানি।


Role-based Authorization

Role-based Authorization হল একটি সাধারণ এবং জনপ্রিয় পদ্ধতি যেখানে ব্যবহারকারীদের নির্দিষ্ট রোলের ভিত্তিতে অ্যাপ্লিকেশনে বিভিন্ন রিসোর্স বা অ্যাক্সেস অনুমোদন করা হয়। একে Role-based Access Control (RBAC) বলা হয়।

কিভাবে কাজ করে:

  • Role: একটি রোল হলো একটি সেট বা ক্যাটাগরি যা ব্যবহারকারীকে নির্দিষ্ট ধরনের কার্যকলাপ বা অ্যাক্সেস প্রদান করে। যেমন, "Admin", "Manager", "User" ইত্যাদি।
  • Authorize Attribute: ASP.NET Core-এ, আপনি একটি কন্ট্রোলার বা অ্যাকশনে [Authorize] অ্যাট্রিবিউট ব্যবহার করে রোল-বেসড অথোরাইজেশন কনফিগার করতে পারেন।

উদাহরণ:

ধরা যাক, আমাদের অ্যাপ্লিকেশনে দুটি রোল আছে: "Admin" এবং "User"। এখানে, Admin রোলের ব্যবহারকারী অ্যাডমিন প্যানেলে প্রবেশ করতে পারবে, কিন্তু User রোলের ব্যবহারকারী তা করতে পারবে না।

[Authorize(Roles = "Admin")]
public IActionResult AdminPanel()
{
    return View();
}

[Authorize(Roles = "User")]
public IActionResult UserDashboard()
{
    return View();
}

এখানে, AdminPanel শুধুমাত্র Admin রোলের ব্যবহারকারী দেখতে পারবেন, এবং UserDashboard কেবল User রোলের ব্যবহারকারীর জন্যই অ্যাক্সেসযোগ্য।

রোল কনফিগারেশন:

ASP.NET Core-এ রোল তৈরি এবং অ্যাসাইন করতে হলে UserManager এবং RoleManager ব্যবহৃত হয়।

public class SeedData
{
    public static async Task Initialize(IServiceProvider serviceProvider, UserManager<ApplicationUser> userManager)
    {
        var roleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();

        string[] roleNames = { "Admin", "User" };

        foreach (var roleName in roleNames)
        {
            var roleExist = await roleManager.RoleExistsAsync(roleName);
            if (!roleExist)
            {
                var role = new IdentityRole(roleName);
                await roleManager.CreateAsync(role);
            }
        }

        var user = await userManager.FindByEmailAsync("admin@admin.com");
        if (user == null)
        {
            user = new ApplicationUser { UserName = "admin@admin.com", Email = "admin@admin.com" };
            await userManager.CreateAsync(user, "Test@123");
        }

        await userManager.AddToRoleAsync(user, "Admin");
    }
}

এটি Admin এবং User রোল তৈরি করবে এবং ব্যবহারকারীকে নির্দিষ্ট রোল প্রদান করবে।


Policy-based Authorization

Policy-based Authorization হল আরও শক্তিশালী এবং নমনীয় একটি পদ্ধতি যা নির্দিষ্ট শর্ত বা নিয়মের ভিত্তিতে ব্যবহারকারীকে অনুমতি দেয়। এটি Claims বা অন্যান্য কাস্টম প্যারামিটার ব্যবহার করে অধিক নমনীয় অ্যাক্সেস কন্ট্রোল প্রদান করে।

কিভাবে কাজ করে:

  • Policy: একটি পলিসি হলো একটি সেট বা নিয়ম যা এক বা একাধিক শর্তের ভিত্তিতে Authorization প্রদান করে। পলিসি তৈরি করতে হলে, প্রথমে সেটি কনফিগার করা হয় এবং তারপর অ্যাপ্লিকেশনে পলিসি চেক করা হয়।
  • Claims: পলিসি সাধারণত ব্যবহারকারীর Claims (যেমন, নাম, বয়স, বা কাস্টম তথ্য) ব্যবহার করে যাচাই করা হয়।

উদাহরণ:

ধরা যাক, আপনি একটি পলিসি তৈরি করতে চান যা ব্যবহারকারীর বয়স ১৮ বছরের বেশি হলে তাকে একটি নির্দিষ্ট রিসোর্স অ্যাক্সেস দেওয়ার অনুমতি দেয়।

  1. পলিসি কনফিগারেশন: প্রথমে ConfigureServices মেথডে পলিসি কনফিগার করুন।
public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthorization(options =>
    {
        options.AddPolicy("Over18", policy => policy.RequireClaim("Age", "18"));
    });
}

এখানে, "Over18" পলিসি সেই ব্যবহারকারীকে অনুমতি দিবে যার Age claim-এ মান "18" অথবা তার বেশি থাকবে।

  1. পলিসি অ্যাপ্লিকেশন: এখন, আপনি কন্ট্রোলার বা একশন মেথডে এই পলিসি ব্যবহার করতে পারেন।
[Authorize(Policy = "Over18")]
public IActionResult RestrictedArea()
{
    return View();
}

এখানে, RestrictedArea পেজে শুধুমাত্র সেই ব্যবহারকারী প্রবেশ করতে পারবে, যাদের Age claim-এ ১৮ অথবা তার বেশি মান থাকবে।

কাস্টম পলিসি:

আপনি নিজের কাস্টম পলিসিও তৈরি করতে পারেন, যেখানে শর্ত হিসেবে ব্যবহারকারীর বিভিন্ন বৈশিষ্ট্য বা Claims যাচাই করা হয়।

services.AddAuthorization(options =>
{
    options.AddPolicy("MustBeAdmin", policy =>
        policy.RequireAssertion(context =>
            context.User.HasClaim(c => c.Type == "Role" && c.Value == "Admin"));
});

এই কাস্টম পলিসি চেক করবে, ব্যবহারকারীর Role claim-এ "Admin" মান আছে কিনা।


সারাংশ

Role-based Authorization এবং Policy-based Authorization উভয়ই ASP.NET Core-এ শক্তিশালী অথোরাইজেশন পদ্ধতি। Role-based Authorization সোজা এবং ব্যবহার করা সহজ, যেখানে আপনি নির্দিষ্ট রোলের ভিত্তিতে অ্যাক্সেস কন্ট্রোল করেন। অন্যদিকে, Policy-based Authorization বেশি নমনীয় এবং কাস্টম শর্তে ভিত্তি করে অ্যাক্সেস নিয়ন্ত্রণ করতে সক্ষম। এই দুটি পদ্ধতি একে অপরকে পরিপূরক হিসেবে কাজ করে এবং নিরাপত্তা ব্যবস্থাকে আরও শক্তিশালী করে তোলে।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion