Project

General

Profile

« Previous | Next » 

Revision bd93502c

Added by Andreas Kohlbecker over 6 years ago

introducing EditPermissionTester and disabling ToManyRelatedEntitiesListSelect edit buttons depeding on the users permissions

View differences:

src/main/java/eu/etaxonomy/cdm/vaadin/view/name/TaxonNamePopupEditor.java
19 19
import com.vaadin.ui.ListSelect;
20 20
import com.vaadin.ui.TextField;
21 21

  
22
import eu.etaxonomy.cdm.model.common.CdmBase;
22 23
import eu.etaxonomy.cdm.model.name.Rank;
23 24
import eu.etaxonomy.cdm.model.name.TaxonName;
24 25
import eu.etaxonomy.cdm.model.reference.Reference;
26
import eu.etaxonomy.cdm.persistence.hibernate.permission.CRUD;
25 27
import eu.etaxonomy.cdm.vaadin.component.common.TeamOrPersonField;
26 28
import eu.etaxonomy.cdm.vaadin.event.AbstractEditorAction;
27 29
import eu.etaxonomy.cdm.vaadin.event.ReferenceEditorAction;
28 30
import eu.etaxonomy.cdm.vaadin.security.AccessRestrictedView;
31
import eu.etaxonomy.cdm.vaadin.security.UserHelper;
29 32
import eu.etaxonomy.cdm.vaadin.util.converter.SetToListConverter;
30 33
import eu.etaxonomy.vaadin.component.SwitchableTextField;
31 34
import eu.etaxonomy.vaadin.component.ToManyRelatedEntitiesComboboxSelect;
32 35
import eu.etaxonomy.vaadin.component.ToOneRelatedEntityCombobox;
33 36
import eu.etaxonomy.vaadin.mvp.AbstractCdmPopupEditor;
37
import eu.etaxonomy.vaadin.permission.EditPermissionTester;
34 38

  
35 39
/**
36 40
 * @author a.kohlbecker
......
278 282
        addField(basionymCombobox, "basionyms", 0, row, 3, row);
279 283
        basionymCombobox.setWidth(100, Unit.PERCENTAGE);
280 284
        basionymCombobox.withEditButton(true);
285
        basionymCombobox.setEditPermissionTester(new EditPermissionTester() {
286

  
287
            @Override
288
            public boolean userHasEditPermission(Object bean) {
289
                return  UserHelper.fromSession().userHasPermission((CdmBase)bean, CRUD.UPDATE, CRUD.DELETE);
290
            }
291
        });
281 292
        grid.setComponentAlignment(basionymCombobox, Alignment.TOP_RIGHT);
282 293
        row++;
283 294
        basionymAuthorshipField = new TeamOrPersonField("Basionym author(s)");
src/main/java/eu/etaxonomy/vaadin/component/ToManyRelatedEntitiesListSelect.java
27 27
import com.vaadin.ui.GridLayout;
28 28
import com.vaadin.ui.themes.ValoTheme;
29 29

  
30
import eu.etaxonomy.vaadin.permission.EditPermissionTester;
31

  
30 32
/**
31 33
 * Manages the a collection of items internally as LinkedList<V>. If the Collection to operate on is a Set a Converter must be
32 34
 * set. Internally used fields are used in un-buffered mode.
......
63 65

  
64 66
    private EntityFieldInstantiator<F> entityFieldInstantiator;
65 67

  
68
    private EditPermissionTester editPermissionTester;
69

  
66 70
    public  ToManyRelatedEntitiesListSelect(Class<V> itemType, Class<F> fieldType, String caption){
67 71
        this.fieldType = fieldType;
68 72
        this.itemType = itemType;
......
377 381
            if(withEditButton){
378 382
                addButtonIndex++;
379 383
                // edit
380
                buttonGroup.getComponent(0).setEnabled(field.getValue() != null);
384
                buttonGroup.getComponent(0).setEnabled(field.getValue() != null && testEditButtonPermission(field.getValue()));
381 385
            }
382 386
            // add
383 387
            buttonGroup.getComponent(addButtonIndex).setEnabled(isLast || isOrderedCollection);
......
392 396
        }
393 397
    }
394 398

  
399
    /**
400
     * @param field
401
     * @return
402
     */
403
    protected boolean testEditButtonPermission(Object rowValue) {
404
        if(editPermissionTester != null) {
405
            return editPermissionTester.userHasEditPermission(rowValue);
406
        } else {
407
            return true;
408
        }
409
    }
410

  
395 411

  
396 412
    protected List<F> getNestedFields(){
397 413

  
......
579 595
        updateButtonStates();
580 596
    }
581 597

  
598
    /**
599
     * @return the editPermissionTester
600
     */
601
    public EditPermissionTester getEditPermissionTester() {
602
        return editPermissionTester;
603
    }
604

  
605
    /**
606
     * @param editPermissionTester the editPermissionTester to set
607
     */
608
    public void setEditPermissionTester(EditPermissionTester editPermissionTester) {
609
        this.editPermissionTester = editPermissionTester;
610
    }
611

  
582 612
}
src/main/java/eu/etaxonomy/vaadin/permission/EditPermissionTester.java
1
/**
2
* Copyright (C) 2018 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9
package eu.etaxonomy.vaadin.permission;
10

  
11
/**
12
 * Implementations check if the currently authenticated user has edit permissions
13
 * on the object passed to the userHasEditPermission method.
14
 *
15
 * @author a.kohlbecker
16
 * @since Jan 17, 2018
17
 *
18
 */
19
public interface EditPermissionTester {
20

  
21
    /**
22
     * Checks if the currently authenticated user has edit permissions
23
     * on the <code>bean</code>.
24
     *
25
     * @param bean the Object in question
26
     *
27
     * @return true if the current user is allowed to edit the <code>bean</code> passed as parameter.
28
     */
29
    public boolean userHasEditPermission(Object bean);
30

  
31
}

Also available in: Unified diff