/** Turns the rules list into a property bag */ protected Properties toProperties() { Properties props = new Properties(); props.put("mode", catalogMode.toString()); for (DataAccessRule rule : rules) { StringBuilder sbKey = new StringBuilder(rule.getRoot().replaceAll("\\.", "\\\\.")); if (!rule.isGlobalGroupRule()) { sbKey.append(".").append(rule.getLayer().replaceAll("\\.", "\\\\.")); } sbKey.append(".").append(rule.getAccessMode().getAlias()); props.put(sbKey.toString(), rule.getValue()); } return props; }
String workspace = rule.getRoot(); String layer = rule.getLayer(); AccessMode accessMode = rule.getAccessMode();
List<String> lookupWorkspaceAdminRoles() { List<String> roles = new ArrayList<String>(); DataAccessRuleDAO dao = DataAccessRuleDAO.get(); for (DataAccessRule rule : dao.getRules()) { if (rule.getAccessMode() == AccessMode.ADMIN) { roles.addAll(rule.getRoles()); } } return roles; } }
@Override protected void onFormSubmit(DataAccessRule rule) { try { DataAccessRuleDAO dao = DataAccessRuleDAO.get(); //update original orig.setWorkspace(rule.getWorkspace()); orig.setLayer(rule.getLayer()); orig.setAccessMode(rule.getAccessMode()); orig.getRoles().clear(); orig.getRoles().addAll(rule.getRoles()); dao.storeRules(); doReturn(DataSecurityPage.class); } catch (Exception e) { LOGGER.log(Level.SEVERE, "Error occurred while saving rule ", e); error(new ParamResourceModel("saveError", getPage(), e.getMessage())); } }
@Override protected void onFormSubmit(DataAccessRule rule) { try { DataAccessRuleDAO dao = DataAccessRuleDAO.get(); //update original orig.setWorkspace(rule.getWorkspace()); orig.setLayer(rule.getLayer()); orig.setAccessMode(rule.getAccessMode()); orig.getRoles().clear(); orig.getRoles().addAll(rule.getRoles()); dao.storeRules(); doReturn(DataSecurityPage.class); } catch (Exception e) { LOGGER.log(Level.SEVERE, "Error occurred while saving rule ", e); error(new ParamResourceModel("saveError", getPage(), e.getMessage())); } }
@Override protected void onFormSubmit(DataAccessRule rule) { try { DataAccessRuleDAO dao = DataAccessRuleDAO.get(); // we cannot update the original because it might have been serialized // and thus detached, we'll update the rule that is the same as the original one instead dao.getRules() .forEach( r -> { if (r.equals(orig)) { r.setRoot(rule.getRoot()); r.setGlobalGroupRule(rule.isGlobalGroupRule()); r.setLayer(rule.getLayer()); r.setAccessMode(rule.getAccessMode()); r.getRoles().clear(); r.getRoles().addAll(rule.getRoles()); } }); dao.storeRules(); doReturn(DataSecurityPage.class); } catch (Exception e) { LOGGER.log(Level.SEVERE, "Error occurred while saving rule ", e); error(new ParamResourceModel("saveError", getPage(), e.getMessage())); } } }
@Test public void testParseSpaces() { DataAccessRule rule = dao.parseDataAccessRule(" a . b . r ", "ROLE_WHO_CARES"); assertEquals("a", rule.getRoot()); assertEquals("b", rule.getLayer()); assertFalse(rule.isGlobalGroupRule()); assertEquals(AccessMode.READ, rule.getAccessMode()); }
@Test public void testParseGlobalLayerGroupRule() { DataAccessRule r = dao.parseDataAccessRule("group.r", "ROLE_GROUP_OWNER"); assertEquals(r.getRoot(), "group"); assertNull(r.getLayer()); assertTrue(r.isGlobalGroupRule()); assertEquals(AccessMode.READ, r.getAccessMode()); }
@Test public void testParsePlain() { DataAccessRule rule = dao.parseDataAccessRule("a.b.r", "ROLE_WHO_CARES"); assertEquals("a", rule.getRoot()); assertEquals("b", rule.getLayer()); assertFalse(rule.isGlobalGroupRule()); assertEquals(AccessMode.READ, rule.getAccessMode()); }
@Test public void testParseEscapedDots() { DataAccessRule rule = dao.parseDataAccessRule("w. a\\.b . r ", "ROLE_WHO_CARES"); assertEquals("w", rule.getRoot()); assertEquals("a.b", rule.getLayer()); assertFalse(rule.isGlobalGroupRule()); assertEquals(AccessMode.READ, rule.getAccessMode()); }