Project

General

Profile

« Previous | Next » 

Revision 0f563a11

Added by Andreas Kohlbecker about 6 years ago

fixing bugs related to name editing in workingset editor

View differences:

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