Esempio n. 1
0
        public void Convert_MultipleClasses()
        {
            SecurableClassInfo baseClassInfo = new SecurableClassInfo();

            baseClassInfo.ID   = "4bbb1bab-8d37-40c0-918d-7a07cc7de44f";
            baseClassInfo.Name = "File";
            _cache.AddSecurableClassInfo(typeof(File), baseClassInfo);

            SecurableClassInfo derivedClassInfo1 = new SecurableClassInfo();

            derivedClassInfo1.ID   = "00000000-0000-0000-0002-000000000000";
            derivedClassInfo1.Name = "PaperFile";
            _cache.AddSecurableClassInfo(typeof(PaperFile), derivedClassInfo1);

            SecurableClassInfo derivedClassInfo2 = new SecurableClassInfo();

            derivedClassInfo2.ID   = "118a9d5e-4f89-40af-ade5-e4613e4638d5";
            derivedClassInfo2.Name = "InputFile";
            _cache.AddSecurableClassInfo(typeof(SecurableClassInfo), derivedClassInfo2);

            XmlDocument document = _converter.Convert(_cache);

            string expectedXml = @"<?xml version=""1.0""?>
          <securityMetadata xmlns=""http://www.re-motion.org/Security/Metadata/1.0"">
            <classes>
              <class id=""4bbb1bab-8d37-40c0-918d-7a07cc7de44f"" name=""File"" />
              <class id=""00000000-0000-0000-0002-000000000000"" name=""PaperFile"" />
              <class id=""118a9d5e-4f89-40af-ade5-e4613e4638d5"" name=""InputFile"" />
            </classes>
          </securityMetadata>";

            XmlAssert.AreDocumentsEqual(expectedXml, document);
        }
Esempio n. 2
0
        private SecurableClassInfo AddSecurableClassInfo(MetadataCache metadataCache, Type type, string id)
        {
            SecurableClassInfo classInfo = new SecurableClassInfo();

            classInfo.Name = type.FullName;
            classInfo.ID   = id;

            metadataCache.AddSecurableClassInfo(type, classInfo);

            return(classInfo);
        }
Esempio n. 3
0
        public void GetMetadataFromCache()
        {
            ClassReflector     reflector     = new ClassReflector();
            SecurableClassInfo paperFileInfo = reflector.GetMetadata(typeof(PaperFile), _cache);

            Assert.That(paperFileInfo, Is.Not.Null);
            Assert.That(_cache.GetSecurableClassInfo(typeof(PaperFile)), Is.EqualTo(paperFileInfo));

            SecurableClassInfo fileInfo = _cache.GetSecurableClassInfo(typeof(File));

            Assert.That(fileInfo, Is.Not.Null);
            Assert.That(fileInfo.Name, Is.EqualTo("Remotion.Security.UnitTests.TestDomain.File, Remotion.Security.UnitTests.TestDomain"));
        }
Esempio n. 4
0
        public void GetCachedSecurableClassInfos()
        {
            SecurableClassInfo fileTypeInfo      = new SecurableClassInfo();
            SecurableClassInfo paperFileTypeInfo = new SecurableClassInfo();

            _cache.AddSecurableClassInfo(typeof(File), fileTypeInfo);
            _cache.AddSecurableClassInfo(typeof(PaperFile), paperFileTypeInfo);

            List <SecurableClassInfo> infos = _cache.GetSecurableClassInfos();

            Assert.That(infos, Is.Not.Null);
            Assert.That(infos.Count, Is.EqualTo(2));
            Assert.That(infos, Has.Member(fileTypeInfo));
            Assert.That(infos, Has.Member(paperFileTypeInfo));
        }
Esempio n. 5
0
        public void Convert_ClassWithStateProperties()
        {
            SecurableClassInfo classInfo = new SecurableClassInfo();

            classInfo.ID   = "4bbb1bab-8d37-40c0-918d-7a07cc7de44f";
            classInfo.Name = "File";
            _cache.AddSecurableClassInfo(typeof(File), classInfo);

            StatePropertyInfo propertyInfo = new StatePropertyInfo();

            propertyInfo.ID   = "4bbb1bab-8d37-40c0-918d-7a07cc7de44f";
            propertyInfo.Name = "Confidentiality";
            propertyInfo.Values.Add(new EnumValueInfo("Domain.Confidentiality, Domain", "Normal", 0));
            propertyInfo.Values.Add(new EnumValueInfo("Domain.Confidentiality, Domain", "Confidential", 1));
            propertyInfo.Values.Add(new EnumValueInfo("Domain.Confidentiality, Domain", "Private", 2));

            Type         type     = typeof(File);
            PropertyInfo property = type.GetProperty("Confidentiality");

            _cache.AddStatePropertyInfo(property, propertyInfo);

            classInfo.Properties.Add(propertyInfo);

            XmlDocument document = _converter.Convert(_cache);

            string expectedXml = @"<?xml version=""1.0""?>
          <securityMetadata xmlns=""http://www.re-motion.org/Security/Metadata/1.0"">
            <classes>
              <class id=""4bbb1bab-8d37-40c0-918d-7a07cc7de44f"" name=""File"">
                <stateProperties>
                  <statePropertyRef>4bbb1bab-8d37-40c0-918d-7a07cc7de44f</statePropertyRef>
                </stateProperties>
              </class>
            </classes>

            <stateProperties>
              <stateProperty id=""4bbb1bab-8d37-40c0-918d-7a07cc7de44f"" name=""Confidentiality"">
                <state name=""Normal|Domain.Confidentiality, Domain"" value=""0"" />
                <state name=""Confidential|Domain.Confidentiality, Domain"" value=""1"" />
                <state name=""Private|Domain.Confidentiality, Domain"" value=""2"" />
              </stateProperty>
            </stateProperties>
          </securityMetadata>";

            XmlAssert.AreDocumentsEqual(expectedXml, document);
        }
Esempio n. 6
0
        public void GetMetadata()
        {
            List <EnumValueInfo> fileAccessTypes = new List <EnumValueInfo> ();

            fileAccessTypes.Add(AccessTypes.Read);
            fileAccessTypes.Add(AccessTypes.Write);
            fileAccessTypes.Add(AccessTypes.Journalize);

            List <EnumValueInfo> paperFileAccessTypes = new List <EnumValueInfo> ();

            paperFileAccessTypes.Add(AccessTypes.Read);
            paperFileAccessTypes.Add(AccessTypes.Write);
            paperFileAccessTypes.Add(AccessTypes.Journalize);
            paperFileAccessTypes.Add(AccessTypes.Archive);

            Expect.Call(_statePropertyReflectorMock.GetMetadata(typeof(PaperFile).GetProperty("Confidentiality"), _cache)).Return(_confidentialityProperty);
            Expect.Call(_statePropertyReflectorMock.GetMetadata(typeof(PaperFile).GetProperty("State"), _cache)).Return(_stateProperty);
            Expect.Call(_statePropertyReflectorMock.GetMetadata(typeof(File).GetProperty("Confidentiality"), _cache)).Return(_confidentialityProperty);
            Expect.Call(_accessTypeReflectorMock.GetAccessTypesFromType(typeof(File), _cache)).Return(fileAccessTypes);
            Expect.Call(_accessTypeReflectorMock.GetAccessTypesFromType(typeof(PaperFile), _cache)).Return(paperFileAccessTypes);
            _mocks.ReplayAll();

            SecurableClassInfo info = _classReflector.GetMetadata(typeof(PaperFile), _cache);

            _mocks.VerifyAll();

            Assert.That(info, Is.Not.Null);
            Assert.That(info.Name, Is.EqualTo("Remotion.Security.UnitTests.TestDomain.PaperFile, Remotion.Security.UnitTests.TestDomain"));
            Assert.That(info.ID, Is.EqualTo("00000000-0000-0000-0002-000000000000"));

            Assert.That(info.DerivedClasses.Count, Is.EqualTo(0));
            Assert.That(info.BaseClass, Is.Not.Null);
            Assert.That(info.BaseClass.Name, Is.EqualTo("Remotion.Security.UnitTests.TestDomain.File, Remotion.Security.UnitTests.TestDomain"));
            Assert.That(info.BaseClass.DerivedClasses.Count, Is.EqualTo(1));
            Assert.That(info.BaseClass.DerivedClasses, Has.Member(info));

            Assert.That(info.Properties.Count, Is.EqualTo(2));
            Assert.That(info.Properties, Has.Member(_confidentialityProperty));
            Assert.That(info.Properties, Has.Member(_stateProperty));

            Assert.That(info.AccessTypes.Count, Is.EqualTo(4));
            foreach (EnumValueInfo accessType in paperFileAccessTypes)
            {
                Assert.That(info.AccessTypes, Has.Member(accessType));
            }
        }
Esempio n. 7
0
        public void Convert_OneEmptyClass()
        {
            SecurableClassInfo classInfo = new SecurableClassInfo();

            classInfo.ID   = "4bbb1bab-8d37-40c0-918d-7a07cc7de44f";
            classInfo.Name = "File";
            _cache.AddSecurableClassInfo(typeof(File), classInfo);

            XmlDocument document = _converter.Convert(_cache);

            string expectedXml = @"<?xml version=""1.0""?>
          <securityMetadata xmlns=""http://www.re-motion.org/Security/Metadata/1.0"">
            <classes>
              <class id=""4bbb1bab-8d37-40c0-918d-7a07cc7de44f"" name=""File"" />
            </classes>
          </securityMetadata>";

            XmlAssert.AreDocumentsEqual(expectedXml, document);
        }
Esempio n. 8
0
        public void Convert_ClassWithAccessTypes()
        {
            SecurableClassInfo classInfo = new SecurableClassInfo();

            classInfo.ID   = "4bbb1bab-8d37-40c0-918d-7a07cc7de44f";
            classInfo.Name = "File";
            _cache.AddSecurableClassInfo(typeof(File), classInfo);

            EnumValueInfo accessType1 = new EnumValueInfo("Domain.AccessType, Domain", "Archive", 0);

            accessType1.ID = "64d8f74e-685f-44ab-9705-1fda9ff836a4";
            _cache.AddAccessType(DomainAccessTypes.Archive, accessType1);

            EnumValueInfo accessType2 = new EnumValueInfo("Domain.AccessType, Domain", "Journalize", 1);

            accessType2.ID = "c6995b9b-7fed-42df-a2d1-897600b00fb0";
            _cache.AddAccessType(DomainAccessTypes.Journalize, accessType2);

            classInfo.AccessTypes.Add(accessType1);
            classInfo.AccessTypes.Add(accessType2);

            XmlDocument document = _converter.Convert(_cache);

            string expectedXml = @"<?xml version=""1.0""?>
          <securityMetadata xmlns=""http://www.re-motion.org/Security/Metadata/1.0"">
            <classes>
              <class id=""4bbb1bab-8d37-40c0-918d-7a07cc7de44f"" name=""File"">
                <accessTypes>
                  <accessTypeRef>64d8f74e-685f-44ab-9705-1fda9ff836a4</accessTypeRef>
                  <accessTypeRef>c6995b9b-7fed-42df-a2d1-897600b00fb0</accessTypeRef>
                </accessTypes>
              </class>
            </classes>

            <accessTypes>
              <accessType id=""64d8f74e-685f-44ab-9705-1fda9ff836a4"" name=""Archive|Domain.AccessType, Domain"" value=""0"" />
              <accessType id=""c6995b9b-7fed-42df-a2d1-897600b00fb0"" name=""Journalize|Domain.AccessType, Domain"" value=""1"" />
            </accessTypes>
          </securityMetadata>";

            XmlAssert.AreDocumentsEqual(expectedXml, document);
        }
Esempio n. 9
0
        public void CacheSecurableClassInfos()
        {
            Type fileType      = typeof(File);
            Type paperFileType = typeof(PaperFile);

            SecurableClassInfo fileTypeInfo      = new SecurableClassInfo();
            SecurableClassInfo paperFileTypeInfo = new SecurableClassInfo();

            Assert.That(_cache.ContainsSecurableClassInfo(fileType), Is.False);
            Assert.That(_cache.GetSecurableClassInfo(fileType), Is.Null);

            _cache.AddSecurableClassInfo(fileType, fileTypeInfo);
            Assert.That(_cache.GetSecurableClassInfo(fileType), Is.SameAs(fileTypeInfo));
            Assert.That(_cache.ContainsSecurableClassInfo(paperFileType), Is.False);
            Assert.That(_cache.GetSecurableClassInfo(paperFileType), Is.Null);

            _cache.AddSecurableClassInfo(paperFileType, paperFileTypeInfo);
            Assert.That(_cache.GetSecurableClassInfo(fileType), Is.SameAs(fileTypeInfo));
            Assert.That(_cache.GetSecurableClassInfo(paperFileType), Is.SameAs(paperFileTypeInfo));
        }
Esempio n. 10
0
        public void ConvertAndSave_LocalizedClassName()
        {
            CultureInfo[] cultures = CreateCultureInfos("de", "en");
            LocalizingMetadataConverter converter = new LocalizingMetadataConverter(_localizationConverter, cultures);
            string             filename           = "metadata.xml";
            MetadataCache      cache     = new MetadataCache();
            SecurableClassInfo classInfo = AddSecurableClassInfo(cache, typeof(SecurableObject), "21df1db3-affd-4c1a-b14e-340c1405bd69");

            LocalizedName expectedGermanName = CreateLocalizedName(classInfo);

            _localizationConverter.ConvertAndSave(new LocalizedName[] { expectedGermanName }, cultures[0], filename);
            LocalizedName expectedEnglishName = CreateLocalizedName(classInfo);

            _localizationConverter.ConvertAndSave(new LocalizedName[] { expectedEnglishName }, cultures[1], filename);
            _mocks.ReplayAll();

            converter.ConvertAndSave(cache, filename);

            _mocks.VerifyAll();
        }
Esempio n. 11
0
        public void Convert_IntegrationTest()
        {
            SecurableClassInfo classInfo = new SecurableClassInfo();

            classInfo.ID   = "4bbb1bab-8d37-40c0-918d-7a07cc7de44f";
            classInfo.Name = "File";
            _cache.AddSecurableClassInfo(typeof(File), classInfo);

            SecurableClassInfo derivedClassInfo = new SecurableClassInfo();

            derivedClassInfo.ID   = "ac101f66-6d1f-4002-b32b-f951db36582c";
            derivedClassInfo.Name = "PaperFile";
            _cache.AddSecurableClassInfo(typeof(PaperFile), derivedClassInfo);

            classInfo.DerivedClasses.Add(derivedClassInfo);
            derivedClassInfo.BaseClass = classInfo;

            StatePropertyInfo propertyInfo1 = new StatePropertyInfo();

            propertyInfo1.ID   = "d81b1521-ea06-4338-af6f-ff8510394efd";
            propertyInfo1.Name = "Confidentiality";
            propertyInfo1.Values.Add(new EnumValueInfo("Domain.Confidentiality, Domain", "Normal", 0));
            propertyInfo1.Values.Add(new EnumValueInfo("Domain.Confidentiality, Domain", "Confidential", 1));
            propertyInfo1.Values.Add(new EnumValueInfo("Domain.Confidentiality, Domain", "Private", 2));

            StatePropertyInfo propertyInfo2 = new StatePropertyInfo();

            propertyInfo2.ID   = "40749391-5c45-4fdd-a698-53a6cf167ae7";
            propertyInfo2.Name = "SomeEnum";
            propertyInfo2.Values.Add(new EnumValueInfo("Namespace.TypeName, Assembly", "First", 0));
            propertyInfo2.Values.Add(new EnumValueInfo("Namespace.TypeName, Assembly", "Second", 1));
            propertyInfo2.Values.Add(new EnumValueInfo("Namespace.TypeName, Assembly", "Third", 2));

            Type         type      = typeof(File);
            PropertyInfo property1 = type.GetProperty("Confidentiality");

            _cache.AddStatePropertyInfo(property1, propertyInfo1);
            PropertyInfo property2 = type.GetProperty("SimpleEnum");

            _cache.AddStatePropertyInfo(property2, propertyInfo2);

            classInfo.Properties.Add(propertyInfo1);
            derivedClassInfo.Properties.Add(propertyInfo1);
            derivedClassInfo.Properties.Add(propertyInfo2);

            EnumValueInfo accessType1 = new EnumValueInfo("Domain.AccessType, Domain", "Archive", 0);

            accessType1.ID = "64d8f74e-685f-44ab-9705-1fda9ff836a4";
            _cache.AddAccessType(DomainAccessTypes.Archive, accessType1);

            EnumValueInfo accessType2 = new EnumValueInfo("Domain.AccessType, Domain", "Journalize", 1);

            accessType2.ID = "c6995b9b-7fed-42df-a2d1-897600b00fb0";
            _cache.AddAccessType(DomainAccessTypes.Journalize, accessType2);

            classInfo.AccessTypes.Add(accessType1);
            derivedClassInfo.AccessTypes.Add(accessType1);
            derivedClassInfo.AccessTypes.Add(accessType2);

            EnumValueInfo abstractRole1 = new EnumValueInfo("Domain.AbstractRole, Domain", "Administrator", 0);

            abstractRole1.ID = "00000004-0001-0000-0000-000000000000";
            _cache.AddAbstractRole(SpecialAbstractRoles.Administrator, abstractRole1);

            EnumValueInfo abstractRole2 = new EnumValueInfo("Domain.AbstractRole, Domain", "PowerUser", 1);

            abstractRole2.ID = "3b84739a-7f35-4224-989f-3d5b05047cbb";
            _cache.AddAbstractRole(SomeEnum.First, abstractRole2);

            XmlDocument document = _converter.Convert(_cache);

            string expectedXml = @"<?xml version=""1.0""?>
          <securityMetadata xmlns=""http://www.re-motion.org/Security/Metadata/1.0"">
            <classes>
              <class id=""4bbb1bab-8d37-40c0-918d-7a07cc7de44f"" name=""File"">
                <stateProperties>
                  <statePropertyRef>d81b1521-ea06-4338-af6f-ff8510394efd</statePropertyRef>
                </stateProperties>

                <accessTypes>
                  <accessTypeRef>64d8f74e-685f-44ab-9705-1fda9ff836a4</accessTypeRef>
                </accessTypes>
              </class>

              <class id=""ac101f66-6d1f-4002-b32b-f951db36582c"" name=""PaperFile"" base=""4bbb1bab-8d37-40c0-918d-7a07cc7de44f"">
                <stateProperties>
                  <statePropertyRef>d81b1521-ea06-4338-af6f-ff8510394efd</statePropertyRef>
                  <statePropertyRef>40749391-5c45-4fdd-a698-53a6cf167ae7</statePropertyRef>
                </stateProperties>

                <accessTypes>
                  <accessTypeRef>64d8f74e-685f-44ab-9705-1fda9ff836a4</accessTypeRef>
                  <accessTypeRef>c6995b9b-7fed-42df-a2d1-897600b00fb0</accessTypeRef>
                </accessTypes>
              </class>
            </classes>

            <stateProperties>
              <stateProperty id=""d81b1521-ea06-4338-af6f-ff8510394efd"" name=""Confidentiality"">
                <state name=""Normal|Domain.Confidentiality, Domain"" value=""0"" />
                <state name=""Confidential|Domain.Confidentiality, Domain"" value=""1"" />
                <state name=""Private|Domain.Confidentiality, Domain"" value=""2"" />
              </stateProperty>

              <stateProperty id=""40749391-5c45-4fdd-a698-53a6cf167ae7"" name=""SomeEnum"">
                <state name=""First|Namespace.TypeName, Assembly"" value=""0"" />
                <state name=""Second|Namespace.TypeName, Assembly"" value=""1"" />
                <state name=""Third|Namespace.TypeName, Assembly"" value=""2"" />
              </stateProperty>
            </stateProperties>

            <accessTypes>
              <accessType id=""64d8f74e-685f-44ab-9705-1fda9ff836a4"" name=""Archive|Domain.AccessType, Domain"" value=""0"" />
              <accessType id=""c6995b9b-7fed-42df-a2d1-897600b00fb0"" name=""Journalize|Domain.AccessType, Domain"" value=""1"" />
            </accessTypes>

            <abstractRoles>
              <abstractRole id=""00000004-0001-0000-0000-000000000000"" name=""Administrator|Domain.AbstractRole, Domain"" value=""0"" />
              <abstractRole id=""3b84739a-7f35-4224-989f-3d5b05047cbb"" name=""PowerUser|Domain.AbstractRole, Domain"" value=""1"" />
            </abstractRoles>
          </securityMetadata>";

            XmlAssert.AreDocumentsEqual(expectedXml, document);
        }
Esempio n. 12
0
 private LocalizedName CreateLocalizedName(SecurableClassInfo classInfo)
 {
     return(new LocalizedName(classInfo.ID, classInfo.Name, classInfo.Name));
 }