use of com.manydesigns.portofino.actions.Group in project Portofino by ManyDesigns.
the class UpstairsAction method setupUserPages.
protected void setupUserPages(ConnectionProvider connectionProvider, Template template, Table userTable, List<Map> createdPages) throws Exception {
List<Reference> references = computeChildren(userTable);
if (references != null) {
for (Reference ref : references) {
Column fromColumn = ref.getActualFromColumn();
Column toColumn = ref.getActualToColumn();
Table fromTable = fromColumn.getTable();
Table toTable = toColumn.getTable();
String entityName = fromTable.getActualEntityName();
List<Column> pkColumns = toTable.getPrimaryKey().getColumns();
if (!pkColumns.contains(toColumn)) {
continue;
}
String linkToUserProperty = fromColumn.getActualPropertyName();
String childQuery = "from " + entityName + " where " + linkToUserProperty + " = %{#securityUtils.primaryPrincipal.id}" + " order by id desc";
String dirName = "my-" + entityName;
boolean multipleRoles = isMultipleRoles(fromTable, ref, references);
if (multipleRoles) {
dirName += "-as-" + linkToUserProperty;
}
FileObject dir = actionsDirectory.resolveFile(dirName);
Map<String, String> bindings = new HashMap<>();
bindings.put("generatedClassName", "UserManagementCrudAction");
bindings.put("parentName", "securityUtils");
bindings.put("parentProperty", "primaryPrincipal.id");
bindings.put("linkToParentProperty", linkToUserProperty);
ActionDescriptor action = createCrudAction(connectionProvider, dir, fromTable, childQuery, template, bindings, null, null, createdPages, 1);
if (action != null) {
Group group = new Group();
group.setName(SecurityLogic.getAnonymousGroup(portofinoConfiguration));
group.setAccessLevel(AccessLevel.DENY.name());
Permissions permissions = new Permissions();
permissions.getGroups().add(group);
action.setPermissions(permissions);
ActionLogic.saveActionDescriptor(dir, action);
}
}
}
}
use of com.manydesigns.portofino.actions.Group in project Portofino by ManyDesigns.
the class EntityPermissionsChecks method configurePermission.
private static void configurePermission(Permissions permissions, String allGroup, String permission, String[] groups) {
for (String groupName : groups) {
if (groupName.equals("*")) {
groupName = allGroup;
}
String finalGroup = groupName;
Group group = permissions.getGroups().stream().filter(g -> g.getName().equals(finalGroup)).findFirst().orElseGet(() -> {
Group grp = new Group();
grp.setName(finalGroup);
grp.setAccessLevel(AccessLevel.VIEW.name());
permissions.getGroups().add(grp);
return grp;
});
if (permission != null) {
group.getPermissions().add(permission);
}
}
}
use of com.manydesigns.portofino.actions.Group in project Portofino by ManyDesigns.
the class TablesAction method getTablePermissions.
@NotNull
private Map<String, Object> getTablePermissions(Table table) {
Map<String, Object> result = new HashMap<>();
List<Group> groups = new ArrayList<>();
Set<String> possibleGroups = security.getGroups();
Optional<Permissions> permissions = table.getJavaAnnotation(EntityPermissions.class).map(a -> EntityPermissionsChecks.getPermissions(portofinoConfiguration, a));
if (permissions.isPresent()) {
permissions.get().getActualPermissions().forEach((name, perms) -> {
Group group = new Group();
group.setName(name);
group.getPermissions().addAll(perms);
groups.add(group);
possibleGroups.remove(name);
});
} else {
Group group = new Group();
group.setName(SecurityLogic.getAllGroup(portofinoConfiguration));
group.getPermissions().add(AbstractCrudAction.PERMISSION_CREATE);
group.getPermissions().add(AbstractCrudAction.PERMISSION_READ);
group.getPermissions().add(AbstractCrudAction.PERMISSION_EDIT);
group.getPermissions().add(AbstractCrudAction.PERMISSION_DELETE);
groups.add(group);
possibleGroups.remove(group.getName());
}
for (String groupName : possibleGroups) {
Group group = new Group();
group.setName(groupName);
groups.add(group);
}
result.put("groups", groups);
return result;
}
use of com.manydesigns.portofino.actions.Group in project Portofino by ManyDesigns.
the class TablesAction method saveTable.
@Path("{db}/{schema}/{table}")
@PUT
public void saveTable(@PathParam("db") String db, @PathParam("schema") String schema, @PathParam("table") String tableName, TableInfo tableInfo) throws Exception {
Table table = tableInfo.table;
Table existing = DatabaseLogic.findTableByName(persistence.getModel(), db, schema, tableName);
if (existing == null) {
throw new WebApplicationException(Response.Status.NOT_FOUND);
}
existing.setEntityName(table.getEntityName());
existing.setJavaClass(table.getJavaClass());
existing.setShortName(table.getShortName());
for (Column column : table.getColumns()) {
Column c2 = DatabaseLogic.findColumnByName(existing, column.getColumnName());
BeanUtils.copyProperties(column, c2);
c2.setTable(existing);
}
existing.getColumns().sort(Comparator.comparingInt(c -> table.getColumns().indexOf(DatabaseLogic.findColumnByName(table, c.getColumnName()))));
existing.getSelectionProviders().clear();
existing.getSelectionProviders().addAll(table.getSelectionProviders());
existing.getSelectionProviders().forEach(sp -> {
sp.setFromTable(existing);
sp.getReferences().forEach(r -> r.setOwner(sp));
});
existing.removeAnnotation(EntityPermissions.class);
Permissions permissions = tableInfo.permissions;
if (permissions != null) {
permissions.init();
String allGroup = SecurityLogic.getAllGroup(portofinoConfiguration);
List<String> create = new ArrayList<>();
List<String> read = new ArrayList<>();
List<String> update = new ArrayList<>();
List<String> delete = new ArrayList<>();
permissions.getActualPermissions().forEach((group, perms) -> {
String actualGroup = group.equals(allGroup) ? "*" : group;
if (perms.contains(AbstractCrudAction.PERMISSION_CREATE)) {
create.add(actualGroup);
}
if (perms.contains(AbstractCrudAction.PERMISSION_READ)) {
read.add(actualGroup);
}
if (perms.contains(AbstractCrudAction.PERMISSION_EDIT)) {
update.add(actualGroup);
}
if (perms.contains(AbstractCrudAction.PERMISSION_DELETE)) {
delete.add(actualGroup);
}
});
if (create.size() == 1 && create.contains("*") && read.size() == 1 && read.contains("*") && update.size() == 1 && update.contains("*") && delete.size() == 1 && delete.contains("*")) {
// Don't add the annotation: permissions have their default values
} else {
Annotation newAnn = new Annotation(EntityPermissions.class);
newAnn.setProperty("create", StringUtils.join(create, ", "));
newAnn.setProperty("read", StringUtils.join(read, ", "));
newAnn.setProperty("update", StringUtils.join(update, ", "));
newAnn.setProperty("delete", StringUtils.join(delete, ", "));
existing.addAnnotation(newAnn);
}
}
persistence.initModel();
persistence.saveXmlModel();
}
Aggregations