001/**
002 * Copyright 2005-2017 The Kuali Foundation
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016package org.kuali.rice.kew.service.impl;
017
018import org.apache.commons.lang.StringUtils;
019import org.kuali.rice.kim.api.KimConstants;
020import org.kuali.rice.kim.api.permission.Permission;
021import org.kuali.rice.kns.kim.permission.PermissionTypeServiceBase;
022
023import java.util.ArrayList;
024import java.util.HashSet;
025import java.util.List;
026import java.util.Map;
027import java.util.Set;
028
029/**
030 * Gives people with a Backdoor Restriction permission the ability to backdoor as anyone
031 *
032 * @author IU Kuali Rice Team (rice.collab@kuali.org)
033 */
034
035public class BackdoorRestrictionPermissionTypeServiceImpl extends PermissionTypeServiceBase {
036    @Override
037    protected List<Permission> performPermissionMatches(Map<String, String> requestedDetails,
038            List<Permission> permissionsList) {
039        // pull all the potential app codes from the permission list
040        Set<String> permissionAppCodes = new HashSet<String>(permissionsList.size());
041        for (Permission permission : permissionsList) {
042            String appCode = permission.getAttributes().get(KimConstants.AttributeConstants.APP_CODE);
043            if (StringUtils.isNotBlank(appCode)) {
044                permissionAppCodes.add(appCode);
045            }
046        }
047        String requestedAppCode = requestedDetails.get(KimConstants.AttributeConstants.APP_CODE);
048        // re-loop over the permissions and build a new list of the ones which have the
049        // matching app codes in their details
050        List<Permission> matchingPermissions = new ArrayList<Permission>();
051        for (Permission permission : permissionsList) {
052            String currentAppCode = permission.getAttributes().get(KimConstants.AttributeConstants.APP_CODE);
053            if (StringUtils.isNotEmpty(requestedAppCode) && requestedAppCode.equals(currentAppCode)) {
054                matchingPermissions.add(permission);
055            }
056        }
057
058        return matchingPermissions;
059    }
060}
061