Revision bd93502c
Added by Andreas Kohlbecker over 6 years ago
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
introducing EditPermissionTester and disabling ToManyRelatedEntitiesListSelect edit buttons depeding on the users permissions