.NET API - Roles & Authorization (السماح بناءً على الدور)

2.6 ‎.NET API - Roles & Authorization (السماح بناءً على الدور)

بعد تفعيل تسجيل الدخول باستخدام JWT، يُفضل في بعض الأنظمة إضافة ميزة الأدوار (Roles) لتحديد صلاحيات المستخدمين، بحيث يُسمح فقط لمستخدمين بدور معين بالدخول إلى Endpoint معين.

👥 أمثلة على الأدوار الشائعة

  • Admin: يمكنه إدارة كل شيء.
  • User: يمكنه فقط عرض البيانات.
  • Manager: لديه صلاحيات خاصة بالإشراف.

🔐 إضافة الدور إلى التوكن

[HttpPost("login")]
public IActionResult Login(UserLoginDto login)
{
    if (login.Username == "admin" && login.Password == "123")
    {
        var claims = new[]
        {
            new Claim(ClaimTypes.Name, login.Username),
            new Claim(ClaimTypes.Role, "Admin")
        };

        var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your_super_secret_key_here"));
        var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

        var token = new JwtSecurityToken(
            expires: DateTime.Now.AddHours(1),
            signingCredentials: creds,
            claims: claims);

        return Ok(new
        {
            token = new JwtSecurityTokenHandler().WriteToken(token)
        });
    }

    return Unauthorized();
}

🛡️ حماية Endpoint بدور معين

[Authorize(Roles = "Admin")]
[HttpGet("admin-only")]
public IActionResult GetAdminData()
{
    return Ok("🚨 هذه البيانات مخصصة فقط للمسؤولين");
}

يمكنك أيضًا السماح بأكثر من دور:

[Authorize(Roles = "Admin,Manager")]
[HttpGet("admin-or-manager")]
public IActionResult GetRestrictedData()
{
    return Ok("✅ هذه البيانات للمسؤول أو المدير فقط");
}

⚙️ التأكد من دعم الأدوار في Program.cs

تأكد من أنك سجلت الخدمات الخاصة بالمصادقة والتفويض:

builder.Services.AddAuthentication(...); // كما في درس JWT
builder.Services.AddAuthorization();

ثم داخل البايبلاين:

app.UseAuthentication();
app.UseAuthorization();

📌 ملاحظات هامة

  • ✅ استخدم ClaimTypes.Role لإضافة الدور في التوكن.
  • ✅ استخدم [Authorize(Roles = "X")] للحد من الوصول حسب الدور.
  • ✅ يمكنك إنشاء سياسات مخصصة (Policies) عند الحاجة المتقدمة.

تعليقات

المشاركات الشائعة من هذه المدونة

C# - Arrays

Entity Framework - ما هو ORM؟ ونبذة عن Dapper وNHibernate

Entity Framework - مقدمة عن Entity Framework