View Javadoc
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 }