/********************************************************************************** * $URL: https://source.sakaiproject.org/svn/metaobj/trunk/metaobj-util/tool-lib/src/java/org/sakaiproject/metaobj/security/model/SimpleToolPermissionManager.java $ * $Id: SimpleToolPermissionManager.java 105079 2012-02-24 23:08:11Z ottenhoff@longsight.com $ *********************************************************************************** * * Copyright (c) 2004, 2005, 2006, 2008 The Sakai Foundation * * Licensed under the Educational Community 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.opensource.org/licenses/ECL-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. * **********************************************************************************/ package org.sakaiproject.metaobj.security.model; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.sakaiproject.metaobj.security.mgt.PermissionManager; import org.sakaiproject.metaobj.security.mgt.ToolPermissionManager; import org.sakaiproject.metaobj.shared.mgt.AgentManager; import org.sakaiproject.metaobj.shared.mgt.IdManager; import org.sakaiproject.metaobj.shared.model.Agent; import org.sakaiproject.metaobj.shared.model.Id; import org.sakaiproject.metaobj.worksite.intf.ToolEventListener; import org.sakaiproject.metaobj.worksite.model.SiteTool; import org.sakaiproject.site.api.ToolConfiguration; public class SimpleToolPermissionManager implements ToolEventListener, ToolPermissionManager { protected final transient Log logger = LogFactory.getLog(getClass()); private Map defaultPermissions; private AgentManager agentManager; private PermissionManager permissionManager; private String permissionEditName; private IdManager idManager; private List functions = new ArrayList(); /** * sets up the default perms for a tool. Use's the tool id as the qualifier. * Assumes that if no perms exist for the tool, the perms should be set to the defaults. * * @param toolConfig */ public void toolSiteChanged(ToolConfiguration toolConfig) { Id toolId = getIdManager().getId(toolConfig.getId()); PermissionsEdit edit = new PermissionsEdit(); edit.setQualifier(toolId); edit.setName(getPermissionEditName()); edit.setSiteId(toolConfig.getContainingPage().getContainingSite().getId()); getPermissionManager().fillPermissions(edit); if (edit.getPermissions() == null || edit.getPermissions().size() == 0) { createDefaultPermissions(edit.getSiteId(), toolId); } } public void toolRemoved(SiteTool siteTool) { // todo remove all authz } protected void createDefaultPermissions(String worksiteId, Id qualifier) { PermissionsEdit edit = setupPermissions(worksiteId, qualifier); edit.setName(getPermissionEditName()); getPermissionManager().updatePermissions(edit); } protected PermissionsEdit setupPermissions(String worksiteId, Id qualifier) { List permissions = new ArrayList(); PermissionsEdit edit = new PermissionsEdit(); edit.setQualifier(qualifier); edit.setSiteId(worksiteId); for (Iterator i = getDefaultPermissions().entrySet().iterator(); i.hasNext();) { Map.Entry entry = (Map.Entry) i.next(); String agentName = (String) entry.getKey(); List functions = (List) entry.getValue(); processFunctions(permissions, agentName, functions, worksiteId); } edit.setPermissions(permissions); return edit; } protected void processFunctions(List permissions, String roleName, List functions, String worksiteId) { Agent agent = getAgentManager().getWorksiteRole(roleName, worksiteId); for (Iterator i = functions.iterator(); i.hasNext();) { Permission permission = new Permission(); permission.setAgent(agent); permission.setFunction((String) i.next()); permissions.add(permission); } } public Map getDefaultPermissions() { return defaultPermissions; } public void setDefaultPermissions(Map defaultPermissions) { this.defaultPermissions = defaultPermissions; } public AgentManager getAgentManager() { return agentManager; } public void setAgentManager(AgentManager agentManager) { this.agentManager = agentManager; } public PermissionManager getPermissionManager() { return permissionManager; } public void setPermissionManager(PermissionManager permissionManager) { this.permissionManager = permissionManager; } public String getPermissionEditName() { return permissionEditName; } public void setPermissionEditName(String permissionEditName) { this.permissionEditName = permissionEditName; } public IdManager getIdManager() { return idManager; } public void setIdManager(IdManager idManager) { this.idManager = idManager; } public List getFunctions(PermissionsEdit edit) { return functions; } public List getReadOnlyQualifiers(PermissionsEdit edit) { return new ArrayList(); } public void duplicatePermissions(ToolConfiguration fromTool, ToolConfiguration toTool) { getPermissionManager().duplicatePermissions(getIdManager().getId(fromTool.getId()), getIdManager().getId(toTool.getId()), toTool.getContainingPage().getContainingSite()); } public void setFunctions(List functions) { this.functions = functions; } }