001 /* 002 * Copyright 2011 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 */ 016 package org.kuali.kfs.sec.util; 017 018 import java.util.ArrayList; 019 import java.util.List; 020 021 import org.apache.commons.lang.StringUtils; 022 import org.kuali.kfs.sec.businessobject.SecurityModelDefinition; 023 import org.kuali.kfs.sec.identity.SecKimAttributes; 024 import org.kuali.kfs.sys.context.SpringContext; 025 import org.kuali.rice.kim.bo.role.dto.RoleMembershipInfo; 026 import org.kuali.rice.kim.bo.types.dto.AttributeSet; 027 import org.kuali.rice.kim.service.RoleManagementService; 028 029 030 public class KimUtil { 031 032 /** 033 * Finds the role membership (if exists) for the given role and member id 034 * 035 * @param roleId id of role to find member for 036 * @param memberRoleId id of member role 037 * @param membershipQualifications Qualifications to match role membership 038 * @return RoleMembershipInfo containing information on the member record, or null if the member id is not assigned to the role 039 */ 040 public static RoleMembershipInfo getRoleMembershipInfoForMemberType(String roleId, String memberRoleId, String memberType, AttributeSet membershipQualifications) { 041 RoleManagementService roleService = SpringContext.getBean(RoleManagementService.class); 042 043 List<String> roleIds = new ArrayList<String>(); 044 roleIds.add(roleId); 045 046 List<RoleMembershipInfo> roleMembers = roleService.getFirstLevelRoleMembers(roleIds); 047 048 RoleMembershipInfo modelMembershipInfo = null; 049 for (RoleMembershipInfo roleMembershipInfo : roleMembers) { 050 if (roleMembershipInfo.getMemberTypeCode().equals(memberType) && roleMembershipInfo.getMemberId().equals(memberRoleId)) { 051 if (membershipQualifications != null) { 052 boolean qualficationsMatch = doQualficationsMatch(membershipQualifications, roleMembershipInfo.getQualifier()); 053 054 if (qualficationsMatch) { 055 modelMembershipInfo = roleMembershipInfo; 056 break; 057 } 058 } 059 else { 060 modelMembershipInfo = roleMembershipInfo; 061 break; 062 } 063 } 064 } 065 066 return modelMembershipInfo; 067 } 068 069 /** 070 * Determines whether an AttributeSet has the same keys and values as another AttributeSet 071 * 072 * @param qualfiicationToMatch AttributeSet to match keys and values 073 * @param qualfication AttributeSet for matching 074 * @return boolean if second AttributeSet has same keys and values as first 075 */ 076 public static boolean doQualficationsMatch(AttributeSet qualfiicationToMatch, AttributeSet qualfication) { 077 boolean qualficationsMatch = true; 078 079 for (String key : qualfiicationToMatch.keySet()) { 080 String value = qualfiicationToMatch.get(key); 081 082 if (qualfication.containsKey(key)) { 083 String matchValue = qualfication.get(key); 084 085 if (!StringUtils.equals(value, matchValue)) { 086 qualficationsMatch = false; 087 } 088 } 089 else { 090 qualficationsMatch = false; 091 } 092 } 093 094 return qualficationsMatch; 095 } 096 097 /** 098 * Determines whether each of the qualifying values in the given qualification (AttributeSet) match the given corresponding values 099 * 100 * @param membershipQualifications AttributeSet containing qualifying values to check 101 * @param constraintCode constraint code value to match 102 * @param operator operator value to match 103 * @param attributeValue attribute value to match 104 * @return boolean true if all qualifying values match the given values, false if at least one qualifying value does not match 105 */ 106 public static boolean doMembershipQualificationsMatchValues(AttributeSet membershipQualifications, String constraintCode, String operator, String attributeValue) { 107 String constraintQualifyValue = membershipQualifications.get(SecKimAttributes.CONSTRAINT_CODE); 108 String operatorQualifyValue = membershipQualifications.get(SecKimAttributes.OPERATOR); 109 String propertyValueQualifyValue = membershipQualifications.get(SecKimAttributes.PROPERTY_VALUE); 110 111 if (!StringUtils.equals(constraintQualifyValue, constraintCode)) { 112 return false; 113 } 114 115 if (!StringUtils.equals(operatorQualifyValue, operator)) { 116 return false; 117 } 118 119 if (!StringUtils.equals(propertyValueQualifyValue, attributeValue)) { 120 return false; 121 } 122 123 return true; 124 } 125 126 }