Revision 0f563a11
Added by Andreas Kohlbecker about 6 years ago
src/main/java/eu/etaxonomy/cdm/service/CdmUserHelper.java | ||
---|---|---|
10 | 10 |
|
11 | 11 |
import java.util.EnumSet; |
12 | 12 |
|
13 |
import org.apache.log4j.Logger; |
|
13 | 14 |
import org.springframework.beans.factory.annotation.Autowired; |
14 | 15 |
import org.springframework.beans.factory.annotation.Qualifier; |
15 | 16 |
import org.springframework.security.authentication.AnonymousAuthenticationToken; |
16 | 17 |
import org.springframework.security.core.Authentication; |
17 | 18 |
import org.springframework.security.core.context.SecurityContext; |
18 | 19 |
import org.springframework.security.core.context.SecurityContextHolder; |
20 |
import org.springframework.security.core.userdetails.UserDetails; |
|
21 |
import org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationToken; |
|
19 | 22 |
|
20 | 23 |
import com.vaadin.spring.annotation.SpringComponent; |
21 | 24 |
import com.vaadin.spring.annotation.UIScope; |
... | ... | |
23 | 26 |
import eu.etaxonomy.cdm.api.application.CdmRepository; |
24 | 27 |
import eu.etaxonomy.cdm.database.PermissionDeniedException; |
25 | 28 |
import eu.etaxonomy.cdm.model.common.CdmBase; |
29 |
import eu.etaxonomy.cdm.model.common.User; |
|
26 | 30 |
import eu.etaxonomy.cdm.persistence.hibernate.permission.CRUD; |
31 |
import eu.etaxonomy.cdm.persistence.hibernate.permission.CdmAuthority; |
|
32 |
import eu.etaxonomy.cdm.persistence.hibernate.permission.CdmAuthorityParsingException; |
|
27 | 33 |
import eu.etaxonomy.cdm.persistence.hibernate.permission.ICdmPermissionEvaluator; |
28 | 34 |
import eu.etaxonomy.cdm.persistence.hibernate.permission.Role; |
29 | 35 |
import eu.etaxonomy.cdm.vaadin.security.RolesAndPermissions; |
... | ... | |
38 | 44 |
@UIScope |
39 | 45 |
public class CdmUserHelper extends VaadinUserHelper { |
40 | 46 |
|
47 |
public static final Logger logger = Logger.getLogger(CdmUserHelper.class); |
|
48 |
|
|
41 | 49 |
@Autowired |
42 | 50 |
private ICdmPermissionEvaluator permissionEvaluator; |
43 | 51 |
|
... | ... | |
170 | 178 |
return currentSecurityContext().getAuthentication(); |
171 | 179 |
} |
172 | 180 |
|
181 |
/** |
|
182 |
* @param username |
|
183 |
* @param cdmType |
|
184 |
* @param entitiyId |
|
185 |
* @param crud |
|
186 |
* @return |
|
187 |
*/ |
|
188 |
@Override |
|
189 |
public void createAuthorityFor(String username, Class<? extends CdmBase> cdmType, Integer entitiyId, EnumSet<CRUD> crud) { |
|
190 |
UserDetails userDetails = repo.getUserService().loadUserByUsername(username); |
|
191 |
if(userDetails != null){ |
|
192 |
User user = (User)userDetails; |
|
193 |
CdmBase entity = repo.getCommonService().find(cdmType, entitiyId); |
|
194 |
CdmAuthority authority = new CdmAuthority(entity, crud); |
|
195 |
try { |
|
196 |
user.getGrantedAuthorities().add(authority.asNewGrantedAuthority()); |
|
197 |
} catch (CdmAuthorityParsingException e) { |
|
198 |
throw new RuntimeException(e); |
|
199 |
} |
|
200 |
repo.getSession().flush(); |
|
201 |
logger.debug("new authority for " + username + ": " + authority.toString()); |
|
202 |
Authentication authentication = new PreAuthenticatedAuthenticationToken(user, user.getPassword(), user.getAuthorities()); |
|
203 |
SecurityContextHolder.getContext().setAuthentication(authentication); |
|
204 |
logger.debug("security context refreshed with user " + username); |
|
205 |
} |
|
206 |
} |
|
207 |
|
|
208 |
/** |
|
209 |
* @param cdmType |
|
210 |
* @param entitiyId |
|
211 |
* @param crud |
|
212 |
* @return |
|
213 |
*/ |
|
214 |
@Override |
|
215 |
public void createAuthorityForCurrentUser(Class<? extends CdmBase> cdmType, Integer entitiyId, EnumSet<CRUD> crud) { |
|
216 |
createAuthorityFor(userName(), cdmType, entitiyId, crud); |
|
217 |
} |
|
218 |
|
|
173 | 219 |
} |
src/main/java/eu/etaxonomy/cdm/vaadin/component/registration/RegistrationItemEditButtonGroup.java | ||
---|---|---|
61 | 61 |
|
62 | 62 |
private Link identifierLink; |
63 | 63 |
|
64 |
public RegistrationItemEditButtonGroup(RegistrationDTO regDto){ |
|
64 |
public RegistrationItemEditButtonGroup(RegistrationDTO regDto) {
|
|
65 | 65 |
|
66 | 66 |
boolean isRegistrationLocked = EnumSet.of( |
67 | 67 |
RegistrationStatus.PUBLISHED, RegistrationStatus.REJECTED) |
src/main/java/eu/etaxonomy/cdm/vaadin/security/PermissionDebugUtils.java | ||
---|---|---|
14 | 14 |
import org.springframework.beans.factory.annotation.Autowired; |
15 | 15 |
import org.springframework.beans.factory.annotation.Qualifier; |
16 | 16 |
import org.springframework.context.annotation.Profile; |
17 |
import org.springframework.security.core.Authentication; |
|
18 |
import org.springframework.security.core.context.SecurityContextHolder; |
|
19 |
import org.springframework.security.core.userdetails.UserDetails; |
|
20 |
import org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationToken; |
|
21 | 17 |
|
22 | 18 |
import com.vaadin.server.FontAwesome; |
23 | 19 |
import com.vaadin.server.VaadinSession; |
... | ... | |
29 | 25 |
|
30 | 26 |
import eu.etaxonomy.cdm.api.application.CdmRepository; |
31 | 27 |
import eu.etaxonomy.cdm.model.common.CdmBase; |
32 |
import eu.etaxonomy.cdm.model.common.User; |
|
33 | 28 |
import eu.etaxonomy.cdm.persistence.hibernate.permission.CRUD; |
34 |
import eu.etaxonomy.cdm.persistence.hibernate.permission.CdmAuthority; |
|
35 |
import sun.security.provider.PolicyParser.ParsingException; |
|
36 | 29 |
|
37 | 30 |
/** |
38 | 31 |
* PermissionDebugUtils provide the following tools: |
... | ... | |
87 | 80 |
public Button gainPerEntityPermissionButton(Class<? extends CdmBase> cdmType, Integer entitiyId, EnumSet<CRUD> crud){ |
88 | 81 |
|
89 | 82 |
Button button = new Button(FontAwesome.BOLT); |
90 |
button.addClickListener(e -> createAuthority(cdmType, entitiyId, crud));
|
|
83 |
button.addClickListener(e -> UserHelper.fromSession().createAuthorityFor(UserHelper.fromSession().userName(), cdmType, entitiyId, crud));
|
|
91 | 84 |
button.addStyleName(ValoTheme.BUTTON_DANGER); |
92 | 85 |
return button; |
93 | 86 |
|
94 | 87 |
} |
95 | 88 |
|
96 |
/** |
|
97 |
* @param cdmType |
|
98 |
* @param entitiyId |
|
99 |
* @param crud |
|
100 |
* @return |
|
101 |
*/ |
|
102 |
private void createAuthority(Class<? extends CdmBase> cdmType, Integer entitiyId, EnumSet<CRUD> crud) { |
|
103 |
String username = UserHelper.fromSession().userName(); |
|
104 |
UserDetails userDetails = repo.getUserService().loadUserByUsername(username); |
|
105 |
if(userDetails != null){ |
|
106 |
User user = (User)userDetails; |
|
107 |
CdmBase entity = repo.getCommonService().find(cdmType, entitiyId); |
|
108 |
CdmAuthority authority = new CdmAuthority(entity, crud); |
|
109 |
try { |
|
110 |
user.getGrantedAuthorities().add(authority.asNewGrantedAuthority()); |
|
111 |
} catch (ParsingException e) { |
|
112 |
throw new RuntimeException(e); |
|
113 |
} |
|
114 |
repo.getUserService().saveOrUpdate(user); |
|
115 |
Authentication authentication = new PreAuthenticatedAuthenticationToken(user, user.getPassword(), user.getAuthorities()); |
|
116 |
SecurityContextHolder.getContext().setAuthentication(authentication); |
|
117 |
} |
|
118 |
} |
|
89 |
|
|
119 | 90 |
} |
src/main/java/eu/etaxonomy/cdm/vaadin/security/UserHelper.java | ||
---|---|---|
8 | 8 |
*/ |
9 | 9 |
package eu.etaxonomy.cdm.vaadin.security; |
10 | 10 |
|
11 |
import java.util.EnumSet; |
|
12 |
|
|
11 | 13 |
import com.vaadin.server.VaadinSession; |
12 | 14 |
|
13 | 15 |
import eu.etaxonomy.cdm.model.common.CdmBase; |
16 |
import eu.etaxonomy.cdm.persistence.hibernate.permission.CRUD; |
|
14 | 17 |
|
15 | 18 |
/** |
16 |
* UserHelper interface. Imeplemtations should use the {@link #VADDIN_SESSION_KEY} to auto registers
|
|
19 |
* UserHelper interface. Implementations should use the {@link #VADDIN_SESSION_KEY} to auto registers
|
|
17 | 20 |
* in the VaadinSession. |
18 | 21 |
* |
19 | 22 |
* @author a.kohlbecker |
... | ... | |
50 | 53 |
|
51 | 54 |
boolean userIsAutheticated(); |
52 | 55 |
|
56 |
public void createAuthorityFor(String username, Class<? extends CdmBase> cdmType, Integer entitiyId, EnumSet<CRUD> crud); |
|
57 |
|
|
58 |
/** |
|
59 |
* @param cdmType |
|
60 |
* @param entitiyId |
|
61 |
* @param crud |
|
62 |
*/ |
|
63 |
void createAuthorityForCurrentUser(Class<? extends CdmBase> cdmType, Integer entitiyId, EnumSet<CRUD> crud); |
|
64 |
|
|
53 | 65 |
|
54 | 66 |
} |
src/main/java/eu/etaxonomy/cdm/vaadin/view/registration/RegistrationWorkingsetPresenter.java | ||
---|---|---|
9 | 9 |
package eu.etaxonomy.cdm.vaadin.view.registration; |
10 | 10 |
|
11 | 11 |
import java.util.ArrayList; |
12 |
import java.util.EnumSet; |
|
12 | 13 |
import java.util.List; |
13 | 14 |
|
14 | 15 |
import org.springframework.beans.factory.annotation.Autowired; |
... | ... | |
31 | 32 |
import eu.etaxonomy.cdm.model.name.TaxonNameFactory; |
32 | 33 |
import eu.etaxonomy.cdm.model.name.TypeDesignationBase; |
33 | 34 |
import eu.etaxonomy.cdm.model.reference.Reference; |
35 |
import eu.etaxonomy.cdm.persistence.hibernate.permission.CRUD; |
|
34 | 36 |
import eu.etaxonomy.cdm.service.CdmFilterablePagingProvider; |
35 | 37 |
import eu.etaxonomy.cdm.service.CdmStore; |
36 | 38 |
import eu.etaxonomy.cdm.service.IRegistrationWorkingSetService; |
... | ... | |
42 | 44 |
import eu.etaxonomy.cdm.vaadin.event.TypeDesignationWorkingsetEditorAction; |
43 | 45 |
import eu.etaxonomy.cdm.vaadin.event.registration.RegistrationWorkflowEvent; |
44 | 46 |
import eu.etaxonomy.cdm.vaadin.model.registration.RegistrationWorkingSet; |
47 |
import eu.etaxonomy.cdm.vaadin.security.UserHelper; |
|
45 | 48 |
import eu.etaxonomy.cdm.vaadin.util.CdmTitleCacheCaptionGenerator; |
46 | 49 |
import eu.etaxonomy.cdm.vaadin.util.converter.TypeDesignationSetManager.TypeDesignationWorkingSetType; |
47 | 50 |
import eu.etaxonomy.cdm.vaadin.view.name.SpecimenTypeDesignationWorkingsetPopupEditor; |
... | ... | |
216 | 219 |
newTaxonNameForRegistration = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES()); |
217 | 220 |
newTaxonNameForRegistration.setNomenclaturalReference(getRepo().getReferenceService().find(workingset.getCitationId())); |
218 | 221 |
EntityChangeEvent nameSaveEvent = getTaxonNameStore().saveBean(newTaxonNameForRegistration); |
222 |
UserHelper.fromSession().createAuthorityForCurrentUser(TaxonName.class, nameSaveEvent.getEntityId(), EnumSet.of(CRUD.UPDATE,CRUD.DELETE)); |
|
219 | 223 |
newTaxonNameForRegistration = getRepo().getNameService().find(nameSaveEvent.getEntityId()); |
220 | 224 |
TaxonNamePopupEditor popup = getNavigationManager().showInPopup(TaxonNamePopupEditor.class); |
221 | 225 |
popup.withDeleteButton(true); |
... | ... | |
239 | 243 |
@EventListener |
240 | 244 |
public void onDoneWithTaxonnameEditor(DoneWithPopupEvent event) throws RegistrationValidationException{ |
241 | 245 |
if(event.getPopup() instanceof TaxonNamePopupEditor){ |
242 |
if(newTaxonNameForRegistration != null && event.getReason().equals(Reason.SAVE)){ |
|
243 |
int taxonNameId = newTaxonNameForRegistration.getId(); |
|
244 |
Registration reg = createNewRegistrationForName(taxonNameId); |
|
245 |
workingset.add(reg); |
|
246 |
if(event.getReason().equals(Reason.SAVE)){ |
|
247 |
if(newTaxonNameForRegistration != null){ |
|
248 |
int taxonNameId = newTaxonNameForRegistration.getId(); |
|
249 |
Registration reg = createNewRegistrationForName(taxonNameId); |
|
250 |
workingset.add(reg); |
|
251 |
} |
|
246 | 252 |
refreshView(); |
247 | 253 |
} else if(event.getReason().equals(Reason.CANCEL)){ |
248 | 254 |
// clean up |
Also available in: Unified diff
fixing bugs related to name editing in workingset editor