using System;
using System.Threading;
using System.Security;
using System.Security.Permissions;
using System.Collections.Generic;
using System.Text;

namespace ImperativeIdentity
{
   class Program
   {
      static void Main(string[] args)
      {
         System.Security.Principal.WindowsIdentity wi =
            System.Security.Principal.WindowsIdentity.GetCurrent();
         Thread.CurrentPrincipal = new System.Security.Principal.WindowsPrincipal(wi);
         Console.WriteLine(wi.Name);
         Console.WriteLine(Thread.CurrentPrincipal.Identity.Name);
         PrincipalPermission pp = new PrincipalPermission(null, "Administratorzy", true);
         pp.Demand();

         PrincipalPermission pp2 = new PrincipalPermission(null, "Użytkownicy", true);
         pp.Union(pp2).Demand();

         // teraz nałóż wymaganie, aby użytkownik należał do fikcyjnej grupy,
         // aby spowodować zgłoszenie wyjątku zabezpieczeń
         try
         {
            PrincipalPermission pp3 = new PrincipalPermission(null,
              "Członkowie Tajnego Stowarzyszenia");
            pp3.Demand();
         }

         catch (SecurityException e)
         {
            Console.WriteLine("Nie masz dostępu do tajnego stowarzyszenia.");
         }

         Console.ReadLine();
      }
   }
}
