.NET Fiddle

CSharp · Console

/Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
	
public class Program
{
	interface IUserPermission {}
	class Permission1 : IUserPermission {}
	class Permission2 : IUserPermission {}
	
	interface IUserRole
	{
		bool HasPermission<T>() where T : IUserPermission;
	}
	
	class NormalUser : IUserRole
	{
		private static readonly List<IUserPermission> _permissions = new() 
		{
			new Permission1()
		};
		
		public bool HasPermission<T>() where T : IUserPermission
		{
			return _permissions.OfType<T>().Any();
		}
	}
	
	class Administrator : IUserRole
	{
		private static readonly List<IUserPermission> _permissions = new() 
		{
			new Permission1(),
			new Permission2()
		};
		
		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}");
	}
}
;