package org.molgenis.security.freemarker;
import freemarker.core.Environment;
import freemarker.template.*;
import org.molgenis.data.DataConverter;
import org.molgenis.security.core.MolgenisPermissionService;
import org.molgenis.security.core.Permission;
import java.io.IOException;
import java.util.Map;
public abstract class PermissionDirective implements TemplateDirectiveModel
{
private final MolgenisPermissionService molgenisPermissionService;
public PermissionDirective(MolgenisPermissionService molgenisPermissionService)
{
this.molgenisPermissionService = molgenisPermissionService;
}
@Override
public void execute(Environment env, @SuppressWarnings("rawtypes") Map params, TemplateModel[] loopVars,
TemplateDirectiveBody body) throws TemplateException, IOException
{
String entityName = DataConverter.toString(params.get("entityName"));
String plugin = DataConverter.toString(params.get("plugin"));
String permission = DataConverter.toString(params.get("permission"));
if (permission == null) throw new TemplateModelException("Missing 'permission' parameter");
if ((entityName == null) && (plugin == null))
throw new TemplateModelException("Missing 'entityName' and/or 'plugin' parameter");
boolean hasPermission = true;
if (entityName != null)
{
hasPermission = molgenisPermissionService.hasPermissionOnEntity(entityName, Permission.valueOf(permission));
}
if ((plugin != null) && hasPermission)
{
hasPermission = molgenisPermissionService.hasPermissionOnPlugin(plugin, Permission.valueOf(permission));
}
execute(hasPermission, env, body);
}
protected abstract void execute(boolean hasPermission, Environment env, TemplateDirectiveBody body)
throws TemplateException, IOException;
}