Inheritance: IApplicationPrincipal
        public static IApplicationPrincipal Convert(this PrincipalSession session)
        {
            Contract.Assert(session != null);

            var identity = new ApplicationIdentity(session.UserId, session.Login, session.Name, session.Email);
            var principal = new ApplicationPrincipal(identity, session.Role, session.Permissions);

            return principal;
        }
            public void Start()
            {
                this.UnitOfWork = new UnitOfWork();
                if (this.IsTransactional)
                {
                    this.Transaction = new Transaction();
                }

                IApplicationPrincipal principal;
                var session = this.req.GetSession();
                if (session != null && session.IsAuthenticated)
                {
                    var identity = new ApplicationIdentity(
                        long.Parse(session.UserAuthId),
                        session.UserName,
                        session.DisplayName,
                        session.Email);
                    principal = new ApplicationPrincipal(
                        identity,
                        session.Roles.ToArray(),
                        session.Permissions.ToArray());
                }
                else
                {
                    principal = ApplicationPrincipal.Anonymous;
                }

                System.Threading.Thread.CurrentPrincipal = principal;
            }