use of com.manydesigns.portofino.actions.Permissions 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.Permissions 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