Search in sources :

Example 6 with Permissions

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;
}
Also used : Group(com.manydesigns.portofino.actions.Group) EntityPermissions(com.manydesigns.portofino.resourceactions.crud.security.EntityPermissions) Permissions(com.manydesigns.portofino.actions.Permissions) FileObject(org.apache.commons.vfs2.FileObject) EntityPermissions(com.manydesigns.portofino.resourceactions.crud.security.EntityPermissions) NotNull(org.jetbrains.annotations.NotNull)

Example 7 with Permissions

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();
}
Also used : ColumnAndAnnotations(com.manydesigns.portofino.upstairs.actions.database.tables.support.ColumnAndAnnotations) Persistence(com.manydesigns.portofino.persistence.Persistence) StringUtils(org.apache.commons.lang.StringUtils) java.util(java.util) AbstractResourceAction(com.manydesigns.portofino.resourceactions.AbstractResourceAction) MutablePropertyAccessor(com.manydesigns.elements.reflection.MutablePropertyAccessor) LoggerFactory(org.slf4j.LoggerFactory) Autowired(org.springframework.beans.factory.annotation.Autowired) SimpleDateFormat(java.text.SimpleDateFormat) AbstractCrudAction(com.manydesigns.portofino.resourceactions.crud.AbstractCrudAction) com.manydesigns.elements.annotations(com.manydesigns.elements.annotations) BigDecimal(java.math.BigDecimal) Form(com.manydesigns.elements.forms.Form) Property(com.manydesigns.portofino.model.Property) MediaType(javax.ws.rs.core.MediaType) EntityPermissions(com.manydesigns.portofino.resourceactions.crud.security.EntityPermissions) JSONStringer(org.json.JSONStringer) MapKeyValueAccessor(com.manydesigns.elements.MapKeyValueAccessor) Permissions(com.manydesigns.portofino.actions.Permissions) BigInteger(java.math.BigInteger) Annotation(com.manydesigns.portofino.model.Annotation) RequiresAdministrator(com.manydesigns.portofino.security.RequiresAdministrator) SecurityLogic(com.manydesigns.portofino.security.SecurityLogic) Logger(org.slf4j.Logger) DisplayMode(com.manydesigns.elements.options.DisplayMode) FileSystemException(org.apache.commons.vfs2.FileSystemException) MutableClassAccessor(com.manydesigns.elements.reflection.MutableClassAccessor) Group(com.manydesigns.portofino.actions.Group) com.manydesigns.portofino.model.database(com.manydesigns.portofino.model.database) FileObject(org.apache.commons.vfs2.FileObject) RequestMessages(com.manydesigns.elements.messages.RequestMessages) TableInfo(com.manydesigns.portofino.upstairs.actions.support.TableInfo) javax.ws.rs(javax.ws.rs) Response(javax.ws.rs.core.Response) SelectImpl(com.manydesigns.elements.annotations.impl.SelectImpl) SearchDisplayMode(com.manydesigns.elements.options.SearchDisplayMode) FormBuilder(com.manydesigns.elements.forms.FormBuilder) FileType(org.apache.commons.vfs2.FileType) EntityPermissionsChecks(com.manydesigns.portofino.resourceactions.crud.security.EntityPermissionsChecks) RequiresAuthentication(org.apache.shiro.authz.annotation.RequiresAuthentication) NotNull(org.jetbrains.annotations.NotNull) ReflectionUtil(com.manydesigns.elements.util.ReflectionUtil) ArrayUtils(org.apache.commons.lang.ArrayUtils) BeanUtils(org.springframework.beans.BeanUtils) EntityPermissions(com.manydesigns.portofino.resourceactions.crud.security.EntityPermissions) Permissions(com.manydesigns.portofino.actions.Permissions) Annotation(com.manydesigns.portofino.model.Annotation)

Aggregations

Permissions (com.manydesigns.portofino.actions.Permissions)7 ActionDescriptor (com.manydesigns.portofino.actions.ActionDescriptor)3 Group (com.manydesigns.portofino.actions.Group)3 FileObject (org.apache.commons.vfs2.FileObject)3 NotNull (org.jetbrains.annotations.NotNull)3 EntityPermissions (com.manydesigns.portofino.resourceactions.crud.security.EntityPermissions)2 MapKeyValueAccessor (com.manydesigns.elements.MapKeyValueAccessor)1 com.manydesigns.elements.annotations (com.manydesigns.elements.annotations)1 SelectImpl (com.manydesigns.elements.annotations.impl.SelectImpl)1 Form (com.manydesigns.elements.forms.Form)1 FormBuilder (com.manydesigns.elements.forms.FormBuilder)1 RequestMessages (com.manydesigns.elements.messages.RequestMessages)1 DisplayMode (com.manydesigns.elements.options.DisplayMode)1 SearchDisplayMode (com.manydesigns.elements.options.SearchDisplayMode)1 MutableClassAccessor (com.manydesigns.elements.reflection.MutableClassAccessor)1 MutablePropertyAccessor (com.manydesigns.elements.reflection.MutablePropertyAccessor)1 ReflectionUtil (com.manydesigns.elements.util.ReflectionUtil)1 ConfigurationSource (com.manydesigns.portofino.config.ConfigurationSource)1 Annotation (com.manydesigns.portofino.model.Annotation)1 Property (com.manydesigns.portofino.model.Property)1