private bool HasAccessToMetadata(MetadataViewModel model)
        {
            string organization = GetSecurityClaim("organization");
            string role         = GetSecurityClaim("role");
            bool   isAdmin      = !string.IsNullOrWhiteSpace(role) && role.Equals("nd.metadata_admin");

            return(isAdmin || model.HasAccess(organization));
        }
        public Dictionary <string, string> GetRegister(string registername, MetadataViewModel model)
        {
            string role = GetSecurityClaim("role");

            MemoryCacher memCacher = new MemoryCacher();

            var cache = memCacher.GetValue("registeritem-" + registername);

            List <RegisterItem> RegisterItems = new List <RegisterItem>();

            if (cache != null)
            {
                RegisterItems = cache as List <RegisterItem>;
            }

            if (RegisterItems.Count < 1)
            {
                System.Net.WebClient c = new System.Net.WebClient();
                c.Encoding = System.Text.Encoding.UTF8;
                var data     = c.DownloadString(System.Web.Configuration.WebConfigurationManager.AppSettings["RegistryUrl"] + "api/register/" + registername);
                var response = Newtonsoft.Json.Linq.JObject.Parse(data);

                var items = response["containeditems"];

                foreach (var item in items)
                {
                    var    id           = item["id"].ToString();
                    var    owner        = item["owner"].ToString();
                    string organization = item["owner"].ToString();

                    var registerItem = new RegisterItem {
                        Id = id, Label = item["label"].ToString(), Organization = organization
                    };

                    if (!RegisterItems.Contains(registerItem))
                    {
                        RegisterItems.Add(registerItem);
                    }
                }

                var logLines = RegisterItems.Select(l => l.Id + ": " + l.Label);
                Log.Info(string.Format("Setting cache for registername: {0}, items: " + Environment.NewLine + " {1}", registername, string.Join(Environment.NewLine, logLines)));
                memCacher.Set("registeritem-" + registername, RegisterItems, new DateTimeOffset(DateTime.Now.AddYears(1)));
            }

            Dictionary <string, string> RegisterItemsForUser = new Dictionary <string, string>();

            foreach (var item in RegisterItems)
            {
                if (!string.IsNullOrWhiteSpace(role) && role.Equals("nd.metadata_admin") || model.HasAccess(item.Organization))
                {
                    RegisterItemsForUser.Add(item.Id, item.Label);
                }
            }

            RegisterItemsForUser = RegisterItemsForUser.OrderBy(o => o.Value).ToDictionary(o => o.Key, o => o.Value);

            return(RegisterItemsForUser);
        }