protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            CloudTableClient cloudTableClientAdmin = this.StorageAccount.CreateCloudTableClient();
            var photoContextAdmin = new PhotoDataServiceContext(cloudTableClientAdmin);

            if (this.User.Identity.IsAuthenticated)
            {
                this.AuthenticatedTableSas = photoContextAdmin.GetSas(this.User.Identity.Name, "admin");
                this.PublicTableSas = photoContextAdmin.GetSas("Public", "admin");
                this.QueueSas = this.StorageAccount.CreateCloudQueueClient().GetQueueReference("messagequeue").GetSharedAccessSignature(
                        new SharedAccessQueuePolicy() {  },
                        "add"
                        );
            }
            else
            {
                this.PublicTableSas = photoContextAdmin.GetSas("Public", "edit");
                this.AuthenticatedTableSas = null;
                this.QueueSas = null;
            }
        }
        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            CloudTableClient cloudTableClientAdmin = this.StorageAccount.CreateCloudTableClient();
            var photoContextAdmin = new PhotoDataServiceContext(cloudTableClientAdmin);

            if (this.User.Identity.IsAuthenticated)
            {
                this.AuthenticatedTableSas = photoContextAdmin.GetSas(this.User.Identity.Name, SharedAccessTablePermissions.Add | SharedAccessTablePermissions.Delete | SharedAccessTablePermissions.Query | SharedAccessTablePermissions.Update);
                this.PublicTableSas = photoContextAdmin.GetSas("Public", SharedAccessTablePermissions.Add | SharedAccessTablePermissions.Delete | SharedAccessTablePermissions.Query | SharedAccessTablePermissions.Update);
                this.QueueSas = this.StorageAccount.CreateCloudQueueClient().GetQueueReference("messagequeue").GetSharedAccessSignature(
                   new SharedAccessQueuePolicy() { Permissions = SharedAccessQueuePermissions.Add | SharedAccessQueuePermissions.Read, SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(15) },
                   null
                   );
            }
            else
            {
                this.PublicTableSas = photoContextAdmin.GetSas("Public", SharedAccessTablePermissions.Add | SharedAccessTablePermissions.Update | SharedAccessTablePermissions.Query);
                this.AuthenticatedTableSas = null;
                this.QueueSas = null;
            }
        }
        public void RefreshAccessCredentials()
        {
            if ((Session["ExpireTime"] as DateTime? == null) || ((DateTime)Session["ExpireTime"] < DateTime.UtcNow))
            {
                CloudTableClient cloudTableClientAdmin = this.StorageAccount.CreateCloudTableClient();
                var photoContextAdmin = new PhotoDataServiceContext(cloudTableClientAdmin);

                Session["Sas"] = photoContextAdmin.GetSas("readonly", "Public");

                if (this.User != null)
                {
                    Session["MySas"] = photoContextAdmin.GetSas("admin", this.User.Identity.Name);
                    Session["Sas"] = photoContextAdmin.GetSas("admin", "Public");
                }

                Session["ExpireTime"] = DateTime.UtcNow.AddMinutes(15);
            }
        }