using System.Collections.Generic;
interface IUserPermission {}
class Permission1 : IUserPermission {}
class Permission2 : IUserPermission {}
bool HasPermission<T>() where T : IUserPermission;
class NormalUser : IUserRole
private static readonly List<IUserPermission> _permissions = new()
public bool HasPermission<T>() where T : IUserPermission
return _permissions.OfType<T>().Any();
class Administrator : IUserRole
private static readonly List<IUserPermission> _permissions = new()
public bool HasPermission<T>() where T : IUserPermission
return _permissions.OfType<T>().Any();
public static void Main()
IUserRole role = new Administrator();
var hasPermission = role.HasPermission<Permission1>();
Console.WriteLine($"Has Permission: {hasPermission}");