SearchWildcardPrivilege implements Privilege { @Override public boolean implies(Privilege p) { if (!(p instanceof SearchWildcardPrivilege)) { return false; } SearchWildcardPrivilege wp = (SearchWildcardPrivilege) p; List<KeyValue> otherParts = wp.parts; if(equals(wp)) { return true; } int index = 0; for (KeyValue otherPart : otherParts) { if (parts.size() - 1 < index) { return true; } else { KeyValue part = parts.get(index); if(!part.getKey().equalsIgnoreCase(otherPart.getKey())) { return false; } if (!impliesKeyValue(part, otherPart)) { return false; } index++; } } for (; index < parts.size(); index++) { KeyValue part = parts.get(index); if (!part.getValue().equals(SearchConstants.ALL)) { return false; } } return true; } SearchWildcardPrivilege(String wildcardString); @Override boolean implies(Privilege p); @Override String toString(); @Override boolean equals(Object o); @Override int hashCode();  }
@Test public void testSimpleNoAction() throws Exception { Privilege collection1 = create(new KeyValue("collection", "coll1")); Privilege collection2 = create(new KeyValue("collection", "coll2")); Privilege collection1Case = create(new KeyValue("colleCtIon", "coLl1")); assertTrue(collection1.implies(collection1)); assertTrue(collection2.implies(collection2)); assertTrue(collection1.implies(collection1Case)); assertTrue(collection1Case.implies(collection1)); assertFalse(collection1.implies(collection2)); assertFalse(collection1Case.implies(collection2)); assertFalse(collection2.implies(collection1)); assertFalse(collection2.implies(collection1Case)); }
@Test public void testSimpleAction() throws Exception { Privilege query = create(new KeyValue("collection", "coll1"), new KeyValue("action", "query")); Privilege update = create(new KeyValue("collection", "coll1"), new KeyValue("action", "update")); Privilege queryCase = create(new KeyValue("colleCtIon", "coLl1"), new KeyValue("AcTiOn", "QuERy")); assertTrue(query.implies(query)); assertTrue(update.implies(update)); assertTrue(query.implies(queryCase)); assertTrue(queryCase.implies(query)); assertFalse(query.implies(update)); assertFalse(queryCase.implies(update)); assertFalse(update.implies(query)); assertFalse(update.implies(queryCase)); }
@Test public void testRoleShorterThanRequest() throws Exception { Privilege collection1 = create(new KeyValue("collection", "coll1")); Privilege query = create(new KeyValue("collection", "coll1"), new KeyValue("action", "query")); Privilege update = create(new KeyValue("collection", "coll1"), new KeyValue("action", "update")); Privilege all = create(new KeyValue("collection", "coll1"), new KeyValue("action", ALL)); assertTrue(collection1.implies(query)); assertTrue(collection1.implies(update)); assertTrue(collection1.implies(all)); assertFalse(query.implies(collection1)); assertFalse(update.implies(collection1)); assertTrue(all.implies(collection1)); }
@Test public void testCollectionAll() throws Exception { Privilege collectionAll = create(new KeyValue("collection", ALL)); Privilege collection1 = create(new KeyValue("collection", "coll1")); assertTrue(collectionAll.implies(collection1)); assertTrue(collection1.implies(collectionAll)); Privilege allUpdate = create(new KeyValue("collection", ALL), new KeyValue("action", "update")); Privilege allQuery = create(new KeyValue("collection", ALL), new KeyValue("action", "query")); Privilege coll1Update = create(new KeyValue("collection", "coll1"), new KeyValue("action", "update")); Privilege coll1Query = create(new KeyValue("collection", "coll1"), new KeyValue("action", "query")); assertTrue(allUpdate.implies(coll1Update)); assertTrue(allQuery.implies(coll1Query)); assertTrue(coll1Update.implies(allUpdate)); assertTrue(coll1Query.implies(allQuery)); assertFalse(allUpdate.implies(coll1Query)); assertFalse(coll1Update.implies(coll1Query)); assertFalse(allQuery.implies(coll1Update)); assertFalse(coll1Query.implies(allUpdate)); assertFalse(allUpdate.implies(allQuery)); assertFalse(allQuery.implies(allUpdate)); assertFalse(coll1Update.implies(coll1Query)); assertFalse(coll1Query.implies(coll1Update)); assertTrue(collectionAll.implies(allUpdate)); assertTrue(collectionAll.implies(allQuery)); assertTrue(collectionAll.implies(coll1Update)); assertTrue(collectionAll.implies(coll1Query)); assertFalse(allUpdate.implies(collectionAll)); assertFalse(allQuery.implies(collectionAll)); assertFalse(coll1Update.implies(collectionAll)); assertFalse(coll1Query.implies(collectionAll)); }
@Test public void testActionAll() throws Exception { Privilege coll1All = create(new KeyValue("collection", "coll1"), new KeyValue("action", ALL)); Privilege coll1Update = create(new KeyValue("collection", "coll1"), new KeyValue("action", "update")); Privilege coll1Query = create(new KeyValue("collection", "coll1"), new KeyValue("action", "query")); assertTrue(coll1All.implies(coll1All)); assertTrue(coll1All.implies(coll1Update)); assertTrue(coll1All.implies(coll1Query)); assertFalse(coll1Update.implies(coll1All)); assertFalse(coll1Query.implies(coll1All)); Privilege coll1 = create(new KeyValue("collection", "coll1")); assertTrue(coll1All.implies(coll1)); assertTrue(coll1.implies(coll1All)); }