blob: d9ada4ff47c0cc5e141b2a8eed590f7db1ce217e [file] [log] [blame]
package ${package}.flux.modules.actions.permission;
/*
* Copyright 2001-2017 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License")
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import org.apache.commons.configuration.Configuration;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.fulcrum.security.entity.Role;
import org.apache.fulcrum.security.torque.om.TurbinePermission;
import org.apache.fulcrum.security.torque.om.TurbinePermissionPeer;
import org.apache.fulcrum.security.util.RoleSet;
import org.apache.fulcrum.yaafi.framework.util.StringUtils;
import org.apache.torque.criteria.Criteria;
import org.apache.turbine.annotation.TurbineConfiguration;
import org.apache.turbine.annotation.TurbineService;
import org.apache.turbine.pipeline.PipelineData;
import org.apache.turbine.services.security.SecurityService;
import org.apache.turbine.util.RunData;
import org.apache.velocity.context.Context;
import ${package}.flux.modules.actions.FluxAction;
/**
* Action to manage permissions in Turbine.
*
* @version $Id: FluxPermissionAction.java,v 1.11 2017/11/16 10:24:41 painter
* Exp $
*/
public class FluxPermissionAction extends FluxAction {
private static Log log = LogFactory.getLog(FluxPermissionAction.class);
private static String PERM_ID = "permission";
/** Injected service instance */
@TurbineService
private SecurityService security;
/** Injected configuration instance */
@TurbineConfiguration
private Configuration conf;
/**
* ActionEvent responsible for inserting a new permission into the Turbine
* security system.
*
* @param data
* Turbine information.
* @param context
* Context for web pages.
* @exception Exception
* a generic exception.
*/
public void doInsert(PipelineData pipelineData, Context context) throws Exception {
RunData data = getRunData(pipelineData);
String name = data.getParameters().getString(PERM_ID);
if (!StringUtils.isEmpty(name)) {
// create the permission
TurbinePermission tp = new TurbinePermission();
tp.setName(name);
tp.setNew(true);
tp.save();
} else {
data.setMessage("Cannot add permission without a name");
data.getParameters().add("mode", "insert");
data.setScreen("permission,FluxPermissionForm.vm");
}
}
/**
* ActionEvent responsible updating a permission. Must check the input for
* integrity before allowing the user info to be update in the database.
*
* @param data
* Turbine information.
* @param context
* Context for web pages.
* @exception Exception
* a generic exception.
*/
public void doUpdate(PipelineData pipelineData, Context context) throws Exception {
RunData data = getRunData(pipelineData);
String old_name = data.getParameters().getString("oldName");
String name = data.getParameters().getString(PERM_ID);
if (!StringUtils.isEmpty(name)) {
/*
* broken Permission perm = security.getPermissionByName(old_name);
* security.renamePermission(perm, name);
*/
// manual rename
Criteria criteria = new Criteria();
criteria.where(TurbinePermissionPeer.PERMISSION_NAME, old_name);
TurbinePermission tp = TurbinePermissionPeer.doSelectSingleRecord(criteria);
if (tp != null) {
tp.setName(name);
tp.save();
}
} else {
data.setMessage("Cannot find permission to update");
data.setScreen("permission,FluxPermissionList.vm");
}
}
/**
* ActionEvent responsible for removing a permission.
*
* @param data
* Turbine information.
* @param context
* Context for web pages.
* @exception Exception
* a generic exception.
*/
public void doDelete(PipelineData pipelineData, Context context) throws Exception {
RunData data = getRunData(pipelineData);
try {
String permName = data.getParameters().getString(PERM_ID);
if (!StringUtils.isEmpty(permName)) {
// just
org.apache.fulcrum.security.model.turbine.entity.TurbinePermission perm = security.<org.apache.fulcrum.security.model.turbine.entity.TurbinePermission>getPermissionByName(
permName);
// remove the role-permission links
RoleSet roles = perm.getRoles();
for (Role role : roles) {
security.revoke(role, perm);
}
// Remove the permission
security.removePermission(perm);
} else {
data.setMessage("Cannot find permission to delete");
data.setScreen("permission,FluxPermissionList.vm");
}
} catch (Exception e) {
data.setMessage("An error occured while trying to remove a permission");
}
}
/**
* Implement this to add information to the context.
*
* @param data
* Turbine information.
* @param context
* Context for web pages.
* @exception Exception
* a generic exception.
*/
public void doPerform(PipelineData pipelineData, Context context) throws Exception {
RunData data = getRunData(pipelineData);
log.info("Running do perform!");
data.setMessage("Can't find the requested action!");
}
}