1 /* 2 * Copyright (c) 2002-2022, City of Paris 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright notice 10 * and the following disclaimer. 11 * 12 * 2. Redistributions in binary form must reproduce the above copyright notice 13 * and the following disclaimer in the documentation and/or other materials 14 * provided with the distribution. 15 * 16 * 3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its 17 * contributors may be used to endorse or promote products derived from 18 * this software without specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE 24 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 25 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30 * POSSIBILITY OF SUCH DAMAGE. 31 * 32 * License 1.0 33 */ 34 package fr.paris.lutece.portal.service.workgroup; 35 36 import fr.paris.lutece.api.user.User; 37 import java.util.ArrayList; 38 import java.util.Collection; 39 import java.util.Locale; 40 41 import fr.paris.lutece.portal.business.user.AdminUser; 42 import fr.paris.lutece.portal.business.workgroup.AdminWorkgroupHome; 43 import fr.paris.lutece.portal.service.i18n.I18nService; 44 import fr.paris.lutece.util.ReferenceList; 45 46 /** 47 * AdminWorkgroupService 48 */ 49 public final class AdminWorkgroupService 50 { 51 public static final String ALL_GROUPS = "all"; 52 private static final String PROPERTY_LABEL_ALL_GROUPS = "portal.workgroup.labelAllGroups"; 53 54 /** 55 * Private constructor 56 */ 57 private AdminWorkgroupService( ) 58 { 59 } 60 61 /** 62 * Check if a resource should be visible to the user according its workgroup 63 * 64 * @param resource 65 * The resource to check 66 * @param user 67 * The current user 68 * @return true if authorized, otherwise false 69 */ 70 public static boolean isAuthorized( AdminWorkgroupResource resource, User user ) 71 { 72 String strWorkgroup = normalizeWorkgroupKey( resource.getWorkgroup( ) ); 73 74 if ( !strWorkgroup.equals( ALL_GROUPS ) ) 75 { 76 return user.getUserWorkgroups( ) != null && user.getUserWorkgroups( ).stream( ).anyMatch( x -> strWorkgroup.equals( x ) ); 77 } 78 79 return true; 80 } 81 82 /** 83 * Check if a resource should be visible to the user according its workgroup 84 * 85 * @param resource 86 * The resource to check 87 * @param user 88 * The current user 89 * @return true if authorized, otherwise false 90 * @deprecated use isAuthorized( AdminWorkgroupResource, User ) 91 */ 92 @Deprecated 93 public static boolean isAuthorized( AdminWorkgroupResource resource, AdminUser user ) 94 { 95 return isAuthorized( resource, (User) user ); 96 } 97 98 /** 99 * Filter a collection of resources for a given user 100 * 101 * @return A filtered collection of resources 102 * @param <E> 103 * The workgroup resource 104 * @param collection 105 * The collection to filter 106 * @param user 107 * The user 108 */ 109 public static <E extends AdminWorkgroupResource> Collection<E> getAuthorizedCollection( Collection<E> collection, User user ) 110 { 111 ArrayList<E> list = new ArrayList<>( ); 112 113 for ( E resource : collection ) 114 { 115 if ( isAuthorized( resource, user ) ) 116 { 117 list.add( resource ); 118 } 119 } 120 121 return list; 122 } 123 124 /** 125 * Filter a collection of resources for a given user 126 * 127 * @return A filtered collection of resources 128 * @param <E> 129 * The workgroup resource 130 * @param collection 131 * The collection to filter 132 * @param user 133 * The user 134 * @deprecated use getAuthorizedCollection( Collection, User ) 135 */ 136 @Deprecated 137 public static <E extends AdminWorkgroupResource> Collection<E> getAuthorizedCollection( Collection<E> collection, AdminUser user ) 138 { 139 return getAuthorizedCollection( collection, (User) user ); 140 } 141 142 /** 143 * Gets all workgroups of the user 144 * 145 * @param user 146 * The current user 147 * @param locale 148 * The Locale 149 * @return A list of workgroup 150 */ 151 public static ReferenceList getUserWorkgroups( AdminUser user, Locale locale ) 152 { 153 ReferenceList list = AdminWorkgroupHome.getUserWorkgroups( user ); 154 list.addItem( ALL_GROUPS, I18nService.getLocalizedString( PROPERTY_LABEL_ALL_GROUPS, locale ) ); 155 156 return list; 157 } 158 159 /** 160 * Normalized an empty or null workgroup key 161 * 162 * @param strAdminWorkgroup 163 * The workgroup key to normalize 164 * @return The workgroup key normalized 165 */ 166 public static String normalizeWorkgroupKey( String strAdminWorkgroup ) 167 { 168 String strNormalized = strAdminWorkgroup; 169 170 if ( ( strAdminWorkgroup == null ) || ( strAdminWorkgroup.equals( "" ) ) ) 171 { 172 strNormalized = AdminWorkgroupService.ALL_GROUPS; 173 } 174 175 return strNormalized; 176 } 177 }