public void EmptyDiscriminator() { var ide = new IdentityDao { Id = "test", Name = "Test", Permissions = new[] { new PermissionDao { Value = true, Function = Admin.Id.ToString(), Scopes = new[] { new ScopeDao { Discriminator = Discriminators.Category.Purchases, Propagation = ScopePropagation.ToMe | ScopePropagation.ToInclusions } } } }.ToList() }; string permissionExplanation = "Tengo:\r\n" + $" - Permiso ADMIN en la categoria 'Purchases' y sus subcategorias\r\n"; var query = $"¿Debería poder '{nameof(Create)}' una instancia de documento Word sin categoria?\r\n" + " No"; PrintTestTriedStarted(permissionExplanation + query); Assert.False(ide.Can(Create).Instance(File.Document.Word.Word1), permissionExplanation + query); PrintTestTriedStarted(permissionExplanation + query); Assert.False(ide.Can(Create).ByAll( Factory.Get <TypeDiscriminatorFactory>().FromType <WordDocumentDao>(), Discriminator.Empty <CategoryDao>()), permissionExplanation + query); query = $"¿Debería poder '{nameof(Create)}' una instancia de documento Word de la categoria 'Purchases'?\r\n" + " Si"; PrintTestTriedStarted(permissionExplanation + query); Assert.True(ide.Can(Create).Instance(File.Document.Word.Word1.Transform(w => w.Category = Discriminators.Category.Purchases)), permissionExplanation + query); query = $"¿Debería poder '{nameof(Create)}' una instancia de documento Word de la categoria 'Sales'?\r\n" + " No"; PrintTestTriedStarted(permissionExplanation + query); Assert.False(ide.Can(Create).Instance(File.Document.Word.Word1.Transform(w => w.Category = Discriminators.Category.Sales)), permissionExplanation + query); }
public void GrantParentDeniedChildren() { var ide = new IdentityDao { Id = "test", Name = "Test", Permissions = new[] { new PermissionDao { Value = true, Function = Admin.Id.ToString(), Scopes = new[] { new ScopeDao { Discriminator = Discriminators.Location.Country.Spain, Propagation = ScopePropagation.ToMe | ScopePropagation.ToInclusions } } }, new PermissionDao { Value = false, Function = Read.Id.ToString(), Scopes = new[] { new ScopeDao { Discriminator = Discriminators.Location.City.Madrid, Propagation = ScopePropagation.ToMe | ScopePropagation.ToInclusions }, new ScopeDao { Discriminator = Factory.Get <TypeDiscriminatorFactory>().FromType <PersonDao>(), Propagation = ScopePropagation.ToMe | ScopePropagation.ToInclusions }, } }, } }; string permissionExplanation = "Tengo:\r\n" + $" - Permiso ADMIN en el estado 'Spain' y sus sublocalizaciones\r\n" + $" - Denegado READ personas en la ciudad 'Madrid' y sus sublocalizaciones\r\n"; var query = $"¿Debería poder '{nameof(Create)}' una instancia de persona sin ciudad?\r\n" + " No"; PrintTestTriedStarted(permissionExplanation + query); Assert.False(ide.Can(Create).Instance(Person.Admin), permissionExplanation + query); query = $"¿Debería poder '{nameof(Create)}' una instancia de persona sin ciudad?\r\n" + " No"; PrintTestTriedStarted(permissionExplanation + query); Assert.False(ide.Can(Create).ByAll( Factory.Get <TypeDiscriminatorFactory>().FromType <PersonDao>(), Discriminator.Empty <CityDao>()), permissionExplanation + query); { query = $"¿Debería poder '{nameof(Create)}' una instancia de persona con la ciudad Madrid?\r\n" + " No"; PrintTestTriedStarted(permissionExplanation + query); Assert.False(ide.Can(Create).Instance(Person.MadridAdmin), permissionExplanation + query); PrintTestTriedStarted(permissionExplanation + query); Assert.False(ide.Can(Create).ByAll( Factory.Get <TypeDiscriminatorFactory>().FromType <PersonDao>(), Discriminators.Location.City.Madrid), permissionExplanation + query); } { query = $"¿Debería poder '{nameof(Create)}' una instancia de persona con la ciudad Alcorcon?\r\n" + " Si"; PrintTestTriedStarted(permissionExplanation + query); Assert.True(ide.Can(Create).Instance(Person.AlcorconAdmin), permissionExplanation + query); PrintTestTriedStarted(permissionExplanation + query); Assert.True(ide.Can(Create).ByAll( Factory.Get <TypeDiscriminatorFactory>().FromType <PersonDao>(), Discriminators.Location.City.Alcorcon), permissionExplanation + query); } var source = new[] { Person.AlcorconAdmin, Person.MadridAdmin }; query = $"¿Debería filtrar para '{nameof(Create)}' una instancia de pesona con la ciudad Alcorcon?\r\n" + " No"; PrintTestTriedStarted(permissionExplanation + query); var source1 = source.AuthorizedTo(ide, Create); using (Printer.Indent2("Source filtered results:")) { foreach (var per in source1) { Printer.WriteLine("Person: " + per); } } Assert.True(source1.Contains(Person.AlcorconAdmin), permissionExplanation + query); query = $"¿Debería filtrar para '{nameof(Create)}' una instancia de pesona con la ciudad Madrid?\r\n" + " Si"; PrintTestTriedStarted(permissionExplanation + query); Assert.False(source.AuthorizedTo(ide, Create).Contains(Person.MadridAdmin), permissionExplanation + query); query = $"¿Debería poder '{nameof(Read)}' objetos del tipo Word?\r\n" + " Si"; PrintTestTriedStarted(permissionExplanation + query); Assert.True(ide.Can(Read).Type <WordDocumentDao>(), permissionExplanation + query); }