TGViewer
C# Geeks (.NET) C# Geeks (.NET) @csharpgeeks · 549 subscribers
Post #274 126
مثال عملی از استفاده از اتریبیوت‌ها 🚀

بیایید یک اتریبیوت سفارشی برای مشخص کردن نقش‌های مجاز برای دسترسی به یک متد کنترلر ایجاد کنیم: 🛡
[AttributeUsage(AttributeTargets.Method, Inherited = false)]
public class AuthorizeRolesAttribute : Attribute
{
public string[] Roles { get; }

public AuthorizeRolesAttribute(params string[] roles)
{
Roles = roles;
}
}

سپس، ما AuthorizeRolesAttribute را به متدهای یک کلاس اعمال می‌کنیم و نقش‌هایی را که مجاز به دسترسی به هر متد هستند، مشخص می‌کنیم:
public class AccountController
{
[AuthorizeRoles("Admin", "Manager")]
public void AdminOnlyAction()
{
Console.WriteLine("Admin or Manager can access this method.");
}

[AuthorizeRoles("User")]
public void UserOnlyAction()
{
Console.WriteLine("Only users can access this method.");
}

public void PublicAction()
{
Console.WriteLine("Everyone can access this method.");
}
}


برای استفاده از این اتریبیوت، می‌توانیم از reflection 🔍 برای گرفتن اطلاعات در مورد اینکه چه اتریبیوت‌هایی به یک متد اعمال شده‌اند و چه پراپرتی‌هایی دارند، استفاده کنیم:
public class RoleBasedAccessControl
{
public void ExecuteAction(object controller, string methodName, string userRole)
{
var method = controller.GetType().GetMethod(methodName);
var attribute = method?.GetCustomAttribute<AuthorizeRolesAttribute>();

if (attribute is null || attribute.Roles.Contains(userRole))
{
method?.Invoke(controller, null);
}
else
{
Console.WriteLine("Access denied. User does not have the required role.");
}
}
}

در اینجا ما یک متد را با نام از یک کلاس کنترلر می‌گیریم و بررسی می‌کنیم که آیا اتریبیوت AuthorizeRolesAttribute به متد اعمال شده است یا نه. اگر اعمال شده باشد، بررسی می‌کنیم که آیا یک کاربر می‌تواند به متد داده شده دسترسی داشته باشد یا نه.

در نهایت، می‌توانیم منطق کنترل دسترسی مبتنی بر نقش را با نقش‌های مختلف کاربر تست کنیم: 🧪
var controller = new AccountController();
var accessControl = new RoleBasedAccessControl();

Console.WriteLine("Testing with Admin role:");
accessControl.ExecuteAction(controller, nameof(AccountController.AdminOnlyAction), "Admin");

Console.WriteLine("\nTesting with User role:");
accessControl.ExecuteAction(controller, nameof(AccountController.UserOnlyAction), "User");

Console.WriteLine("\nTesting with Guest role:");
accessControl.ExecuteAction(controller, nameof(AccountController.AdminOnlyAction), "Guest");

Console.WriteLine("\nTesting public method with Guest role:");
accessControl.ExecuteAction(controller, nameof(AccountController.PublicAction), "Guest");

خروجی: 🖥
Testing with Admin role:
Admin or Manager can access this method.

Testing with User role:
Only users can access this method.

Testing with Guest role:
Access denied. User does not have the required role.

Testing public method with Guest role:
Everyone can access this method.

در این مثال، AuthorizeRolesAttribute برای مشخص کردن نقش‌های مجاز برای دسترسی به هر متد در AccountController استفاده می‌شود. کلاس RoleBasedAccessControl این محدودیت‌ها را با بررسی نقش کاربر در برابر نقش‌های تعریف شده در اتریبیوت، اعمال می‌کند. این نشان می‌دهد که چگونه می‌توان از اتریبیوت‌های سفارشی به روشی عملی و مفید در یک سناریوی دنیای واقعی استفاده کرد. ✅
More from @csharpgeeks
  1. Sep 22, 2026یه مدتی قراره از دنیای NET. فاصله بگیرم، چون وقتشه برم سربازی. راستش نمیدونم این مدت رو چج…
  2. Sep 20, 2026🔥 حالا مشکل اصلی: Alert Storm فرض کن Database از دسترس خارج شده. ۱۰۰ Pod داری. هر Pod می‌…
  3. Sep 20, 2026🚨 طراحی سیستم Monitoring و Alerting در یک سیستم بزرگ فرض کن ساعت ۳ صبح است. سیستم شما با…
  4. Sep 19, 2026#Engineering_Leadership تصمیم نگرفتن هم یک تصمیم است یه چیز عجیب توی تیم‌های مهندسی: گاهی…
  5. Sep 19, 2026☑ چک‌لیست آماده‌سازی تیم، فرایندها و زیرساخت برای توسعه با AI توجه: هیچ چک‌لیستی جهان‌شمول…
  6. Sep 19, 2026📌پایان یک انتظار طولانی: اعتبارسنجی ناهمگام (Async Validation) در NET 11.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →