// (c) 2006 Richard Grimes // www.grimes.demon.co.uk using System; using System.Threading; using System.Security.Principal; using System.Security.Permissions; class App { static void Main() { AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); try { Console.WriteLine("called OnlyAdministrators"); OnlyAdministrators(); } catch (Exception) { Console.WriteLine("OnlyAdministrators failed"); } try { Console.WriteLine("called OnlyRichard"); OnlyRichard(); } catch (Exception) { Console.WriteLine("OnlyRichard failed"); } GenericIdentity identity = new GenericIdentity("Richard"); Thread.CurrentPrincipal = new GenericPrincipal(identity, new string[]{"Managers"}); try { Console.WriteLine("called OnlyManagers"); OnlyManagers(); } catch(Exception) { Console.WriteLine("OnlyManagers failed"); } } [PrincipalPermission(SecurityAction.Demand, Role=@"BUILTIN\Administrators")] static void OnlyAdministrators() { Console.WriteLine("OnlyAdministrators called"); } [PrincipalPermission(SecurityAction.Demand, Name=@"MARS\RichardGrimes")] static void OnlyRichard() { Console.WriteLine("OnlyRichard called"); } [PrincipalPermission(SecurityAction.Demand, Role = "Managers")] static void OnlyManagers() { Console.WriteLine("OnlyManagers called"); } }