För några år sedan sträckläste jag Martin Fowlers PEA och med brinnande hår gjorde jag givetvis (i klassisk "jag kan göra en egen string class som spöar din" anda) en egen mapper med Lazy Load med virtual proxys och allt mys. När det kom till säkerheten för den första skarpa klientapplikation som använde denna gjorde jag ett ramverk (innan dess att jag kom på att 99.5% av alla ramverk är av ondo och sabbar mer än de tillför) som byggde på att vår User implementerade IPricipal och IIdentity och hookade på den på aktuella trådar... Inte helt ovanligt. Inspirerad av Rockys CSLA (som jag då såklart i min enfald tyckte var ovärdig för att det var en Active Record på droger och inte en "äkta" mapper) kände jag mig ganska säker på att min app var schysst, säker och jag kunde sova sött.

Detta var innan HawkEye...

En snabb lite puckad labb med en app som har en enkel Userimplementation som nedan som inte tillhör någon roll alls...

    public class User : IPrincipal, IIdentity
    {
        private List<string> roles;
        private string name;
        #region IPrincipal Members
        public IIdentity Identity
        {
            get { return this; }
        }
        public bool IsInRole(string role)
        {
            return roles.Contains(role);
        }

I appen gör jag en enkel koll på vilka roller jag har och en snarlik för att släppa in alla till den säkra sektionen:

            IPrincipal user = Thread.CurrentPrincipal;
            StatusListBox.Items.Add("Is Admin: " + user.IsInRole("Admin"));
            StatusListBox.Items.Add("Is Jehovah: " + user.IsInRole("Jehovah"));

Vi får vända i dörren och vi kan se genom att spy++:a med Hawkeye att vi kör min Principal. En knapptryckning i Hawkeye och vi injectar en Principal (ba) som svarar true på allt:

Cool... Och Secure Strings som är våra strängar på ecstacy som har en aggresiv gc hantering för att vi inte skall kunna se spionera på dem på heapen? Bara att Spy++:a med Hawkeye.

Rätt bra att veta om när ni gör en ThreatModel för era applikationer...

En bonus med detta verktyg är att det är lysande för att få information om vad som händer när vi skall felsöka en klientapplikation. Att kunna gå in och se alla properties på applikationen och ändra dessa genom en vanlig propertygrid är magiskt bra och underlättar test/debug-livet enormt...