package fr.openwide.core.wicket.more.link.descriptor.parameter.validator;
import java.util.Collection;
import org.apache.wicket.injection.Injector;
import org.apache.wicket.model.IModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.springframework.security.acls.domain.PermissionFactory;
import org.springframework.security.acls.model.Permission;
import com.google.common.collect.Lists;
import fr.openwide.core.jpa.business.generic.model.GenericEntity;
import fr.openwide.core.jpa.security.service.IAuthenticationService;
/**
* @deprecated Use {@link fr.openwide.core.wicket.more.link.descriptor.builder.state.validator.IValidatorState#permission(IModel, String, String...)} <strong>once for each permission</strong> instead
*/
@Deprecated
public class PermissionLinkParameterValidator implements ILinkParameterValidator {
private static final long serialVersionUID = -3298853605826007922L;
private final IModel<? extends GenericEntity<?, ?>> model;
private final Collection<String> permissionNames;
@SpringBean
private IAuthenticationService authenticationService;
@SpringBean
private PermissionFactory permissionFactory;
public PermissionLinkParameterValidator(IModel<? extends GenericEntity<?, ?>> model, String firstPermissionName, String ... otherPermissionNames) {
this.model = model;
this.permissionNames = Lists.asList(firstPermissionName, otherPermissionNames);
Injector.get().inject(this);
}
@Override
public void validateSerialized(PageParameters parameters, LinkParameterValidationErrorCollector collector) {
// Nothing to do
}
@Override
public void validateModel(LinkParameterValidationErrorCollector collector) {
GenericEntity<?, ?> object = model.getObject();
for (String permissionName : permissionNames) {
Permission permission = permissionFactory.buildFromName(permissionName);
if (!authenticationService.hasPermission(object, permission)) {
collector.addError(String.format("Permission '%s' on object '%s' was missing.", permissionName, object));
}
}
}
@Override
public void detach() {
model.detach();
}
}