1 /*
2 * This software was designed and created by Jason Carroll.
3 * Copyright (c) 2002, 2003, 2004 Jason Carroll.
4 * The author can be reached at jcarroll@cowsultants.com
5 * ITracker website: http://www.cowsultants.com
6 * ITracker forums: http://www.cowsultants.com/phpBB/index.php
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it only under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 */
18
19 package org.itracker.services;
20
21 import org.itracker.PasswordException;
22 import org.itracker.UserException;
23 import org.itracker.model.*;
24 import org.itracker.services.exceptions.AuthenticatorException;
25 import org.springframework.security.core.userdetails.UserDetailsService;
26
27 import java.util.Collection;
28 import java.util.List;
29 import java.util.Map;
30 import java.util.Set;
31
32 public interface UserService extends UserDetailsService {
33
34 User getUser(Integer userId);
35
36 User getUserByLogin(String login);
37
38 String getUserPasswordByLogin(String login);
39
40 List<User> getAllUsers();
41
42 int getNumberUsers();
43
44 List<User> getActiveUsers();
45
46 List<User> getSuperUsers();
47
48 List<User> getPossibleOwners(Issue issue, Integer projectId, Integer userId);
49
50 User"../../../org/itracker/model/User.html#User">User createUser(User user) throws UserException;
51
52 User"../../../org/itracker/model/User.html#User">User updateUser(User user) throws UserException;
53
54 String generateUserPassword(User user) throws PasswordException;
55
56 UserPreferences/model/UserPreferences.html#UserPreferences">UserPreferences updateUserPreferences(UserPreferences user) throws UserException;
57
58 void clearOwnedProjects(User user);
59
60 /**
61 * Finds all users assigned to a project having all of the given permissionTypes.
62 *
63 * @param projectID the project ID
64 * @param permissionTypes array of permission types
65 * @return users having the required permissions
66 */
67 List<User> findUsersForProjectByPermissionTypeList(Integer projectID, PermissionType[] permissionTypes);
68
69 /**
70 * This method will call local EJBs to find users with a specific permission.
71 * This method is used by the deafult authenticator to manage permissions locally.
72 * If a pluggable authenticator is implemented that stores permissions in an
73 * external system, calling this method may not have up to date information.
74 *
75 * @param projectId id of the project on which the returned users have permissions
76 * @param permissionType the type of permission to search for
77 * @return an array of UserModels containing the users with the permission
78 */
79
80 List<User> getUsersWithPermissionLocal(Integer projectId, PermissionType permissionType);
81
82 @Deprecated
83 List<User> getUsersWithPermissionLocal(Integer projectId, int permissionType);
84
85 /**
86 * This method will call local EJBs to find all permissions for a user.
87 * This method is used by the deafult authenticator to manage permissions locally.
88 * If a pluggable authenticator is implemented that stores permissions in an
89 * external system, calling this method may not have up to date information.
90 *
91 * @param user the user to find the permissions for
92 * @return an array of PermissionModels containing the user's permissions
93 */
94 List<Permission> getUserPermissionsLocal(User user);
95
96 /**
97 * Adds an additional set of permissions to a user in the database. This does not remove any existing
98 * permissions. Any duplication permissions will be ignored. Before updating the permissions, this
99 * method will call the pluggable authenticator to have the permission set augmented. This augmented
100 * set of permissions will then be used for the actual update.
101 *
102 * @param userId the userId, not login, of the user to add the permissions to
103 * @param newPermissions an array of PermissionModels that represent the new permissions to add to the user
104 * @return true if the operation was successful
105 */
106
107 boolean updateAuthenticator(Integer userId, List<Permission> newPermissions);
108
109 /**
110 * Resets all of the permissions for a user in the database. The new permissions for the user are contained in a
111 * HashMap object. The keys of this map MUST be in the format Perm<permission type>Prod<productId>. For example to add the
112 * VIEW_ALL permission to project 3, the key would be Perm7Prod3. The value of the key would be a Permission
113 * object. Before updating the permissions, this method will call the pluggable authenticator to have the permission
114 * set augmented. This augmented set of permissions will then be used for the actual update.
115 *
116 * @param userId the userId, not login, of the user to add the permissions to
117 * @param newPermissions a HashMap containing keys and Permission values as described in the method description.
118 * @return true if the operation was successful
119 * @see org.itracker.model.util.UserUtilities
120 */
121
122 boolean addUserPermissions(Integer userId, List<Permission> newPermissions);
123
124 /**
125 * Resets all of the permissions for a user in the database. The new permissions for the user are contained in a
126 * HashMap object. The keys of this map MUST be in the format Perm<permission type>Prod<productId>. For example to add the
127 * VIEW_ALL permission to project 3, the key would be Perm7Prod3. The value of the key would be a Permission
128 * object. Before updating the permissions, this method will call the pluggable authenticator to have the permission
129 * set augmented. This augmented set of permissions will then be used for the actual update.
130 *
131 * @param userId the userId, not login, of the user to add the permissions to
132 * @param newPermissions a HashMap containing keys and Permission values as described in the method description.
133 * @return true if the operation was successful
134 * @see org.itracker.model.util.UserUtilities
135 */
136
137 boolean setUserPermissions(Integer userId, List<Permission> newPermissions);
138
139 /**
140 * Resets all of the permissions for a user in the database. The new permissions for the user are contained in a
141 * HashMap object. The keys of this map MUST be in the format Perm<permission type>Prod<productId>. For example to add the
142 * VIEW_ALL permission to project 3, the key would be Perm7Prod3. The value of the key would be a Permission
143 * object. Before updating the permissions, this method will call the pluggable authenticator to have the permission
144 * set augmented. This augmented set of permissions will then be used for the actual update.
145 *
146 * @param userId the userId, not login, of the user to add the permissions to
147 * @param newPermissions a HashMap containing keys and Permission values as described in the method description.
148 * @return true if the operation was successful
149 * @see org.itracker.model.util.UserUtilities
150 */
151
152 boolean removeUserPermissions(Integer userId, List<Permission> newPermissions);
153
154 /**
155 * Returns an array of Permission objects for the requested userId.
156 *
157 * @param userId the userId, not the login, to find the permissions of
158 */
159
160 List<Permission> getPermissionsByUserId(Integer userId);
161
162 /**
163 * Returns a HashMap of all permissions a user has. The HashMap uses the projectId
164 * as the key values, and then contains a HashSet as the value of the key containing
165 * Integer objects of the permissions a user has.
166 * <p/>
167 * A special key of the Integer -1 may also be in the HashMap. This key is used
168 * to represent if the user is a super user, and in which case the user has all
169 * permissions be default.
170 * <p/>
171 * The value of this key would be a Boolen object with the value true
172 * if the user was a super user.
173 * <p/>
174 * This HashMap is usually not used directly, but in conjunction with the hasPermission
175 * methods in UserUtilities to determine if a user has a particular permission.
176 *
177 * @param user a User representing the user that the permissions should be obtained for
178 * @param reqSource the source of the request
179 * @return a Map of permission types by project ID
180 * @see org.itracker.model.util.UserUtilities#hasPermission
181 */
182 Map<Integer, Set<PermissionType>> getUsersMapOfProjectIdsAndSetOfPermissionTypes(User user, int reqSource);
183
184 /**
185 * This method will return a list of users with a specific permission, either explicitly, or
186 * by their role as a super user. This list is obtained calling a method in the pluggable
187 * authenticator, so the actual source of the data may not
188 * be the local datastore.
189 *
190 * @param projectId the project to find the permission for
191 * @param permission the permission to check for
192 * @return an array of Users that represent the users that have the permission
193 */
194 List<User> getUsersWithProjectPermission(Integer projectId, PermissionType permission);
195
196 @Deprecated
197 List<User> getUsersWithProjectPermission(Integer projectId, int permission);
198
199 /**
200 * This method will return a list of users with a specific permission, either explicitly, or
201 * by their role as a super user. This list is obtained calling a method in the pluggable
202 * authenticator, so the actual source of the data may not
203 * be the local datastore.
204 *
205 * @param projectId the project to find the permission for
206 * @param permission the permission to check for
207 * @param activeOnly only include users who are currently active
208 * @return an array of UserModels that represent the users that have the permission
209 */
210 @Deprecated
211 List<User> getUsersWithProjectPermission(Integer projectId, int permission, boolean activeOnly);
212
213 /**
214 * This method will return a list of users with the supplied permission, either explicitly, or
215 * by their role as a super user. This list is obtained calling a method in the pluggable
216 * authenticator, so the actual source of the data may not be the local datastore.
217 *
218 * @param projectId the project to find the permission for
219 * @param permissions the permissions that are checked against
220 * @param requireAll true if all the permissions in the array are required, false if only one is required
221 * @param activeOnly only include users who are currently active
222 * @return an array of UserModels that represent the users that have the permission
223 */
224 List<User> getUsersWithProjectPermission(Integer projectId, PermissionType[] permissions, boolean requireAll, boolean activeOnly);
225
226 @Deprecated
227 List<User> getUsersWithProjectPermission(Integer projectId, int[] permissions, boolean requireAll, boolean activeOnly);
228
229 /**
230 * This method will return a list of users with any of the supplied permission, either explicitly, or
231 * by their role as a super user. This list is obtained calling a method in the pluggable
232 * authenticator, so the actual source of the data may not
233 * be the local datastore.
234 *
235 * @param projectId the project to find the permission for
236 * @param permissions the permissions that are checked against
237 * @return an array of UserModels that represent the users that have the permission
238 */
239 List<User> getUsersWithAnyProjectPermission(Integer projectId, PermissionType[] permissions);
240
241 List<User> getUsersWithProjectPermission(Integer projectId, PermissionType permissionType, boolean activeOnly);
242
243 /**
244 * This method will return a list of users with any of the supplied permission, either explicitly, or
245 * by their role as a super user. This list is obtained calling a method in the pluggable
246 * authenticator, so the actual source of the data may not
247 * be the local datastore.
248 *
249 * @param projectId the project to find the permission for
250 * @param permissionTypes the permissions that are checked against
251 * @return an array of UserModels that represent the users that have the permission
252 */
253 @Deprecated
254 List<User> getUsersWithAnyProjectPermission(Integer projectId, int[] permissionTypes);
255
256 /**
257 * This method will return a list of users with any of the supplied permission, either explicitly, or
258 * by their role as a super user. This list is obtained calling a method in the pluggable
259 * authenticator, so the actual source of the data may not
260 * be the local datastore.
261 *
262 * @param projectId the project to find the permission for
263 * @param permissions the permissions that are checked against
264 * @param activeOnly only include users who are currently active
265 * @return an array of UserModels that represent the users that have the permission
266 */
267 List<User> getUsersWithAnyProjectPermission(Integer projectId, PermissionType[] permissions, boolean activeOnly);
268
269 @Deprecated
270 List<User> getUsersWithAnyProjectPermission(Integer projectId, int[] permissions, boolean activeOnly);
271
272 /**
273 * This method checks the login of a user, and returns the user if authentication was successful.
274 *
275 * @param login the login the user/client provided
276 * @param authentication the user's authentication information, if known
277 * @param authType the type of authentication information being provided
278 * @param reqSource the source from which the request was made (eg web, api)
279 * @return a User if the login is successful
280 * @throws AuthenticatorException an exception if the login is unsuccessful, or an error occurs
281 */
282 User checkLogin(String login, Object authentication, int authType, int reqSource) throws AuthenticatorException;
283
284 /**
285 * This method checks to see if the given user is allowed to self register.
286 *
287 * @param user a User object that contains the data the user submitted
288 * @param authentication the user's authentication information, if known
289 * @param authType the type of authentication information being provided
290 * @param reqSource the source from which the request was made (eg web, api)
291 * @return true if the user is allowed to register
292 * @throws AuthenticatorException an exception if an error occurs
293 */
294 boolean allowRegistration(User user, Object authentication, int authType, int reqSource) throws AuthenticatorException;
295
296 /**
297 * This method checks to see if a new user profile can be created within ITracker
298 *
299 * @param user a User object that contains the data for the new user. If null,
300 * then the request is being made for an unknown future user. For example,
301 * the system may request this with an null user if it needs to know if the system
302 * should even present the option to create a new user
303 * @param authentication the user's authentication information, if known
304 * @param authType the type of authentication information being provided
305 * @param reqSource the source from which the request was made (eg web, api)
306 * @return a boolean indicating whether new user profile can be created through ITracker
307 * @throws AuthenticatorException an exception if an error occurs
308 */
309 boolean allowProfileCreation(User user, Object authentication, int authType, int reqSource) throws AuthenticatorException;
310
311 /**
312 * This method checks to see if the given user's core user profile information
313 * can be updated locally.
314 *
315 * @param user a User object that contains the data the user submitted
316 * @param authentication the user's authentication information, if known
317 * @param authType the type of authentication information being provided
318 * @param reqSource the source from which the request was made (eg web, api)
319 * @return a boolean whether the user's core profile information can be updated
320 * @throws AuthenticatorException an exception if an error occurs
321 */
322 boolean allowProfileUpdates(User user, Object authentication, int authType, int reqSource) throws AuthenticatorException;
323
324 /**
325 * This method checks to see if the given user's password can be updated locally.
326 *
327 * @param user a User object that contains the data the user submitted
328 * @param authentication the user's authentication information, if known
329 * @param authType the type of authentication information being provided
330 * @param reqSource the source from which the request was made (eg web, api)
331 * @return a boolean whether the user's core profile information can be updated
332 * @throws AuthenticatorException an exception if an error occurs
333 */
334 boolean allowPasswordUpdates(User user, Object authentication, int authType, int reqSource) throws AuthenticatorException;
335
336 /**
337 * This method checks to see if the given user's permission information
338 * can be updated locally.
339 *
340 * @param user a User object that contains the data the user submitted
341 * @param authentication the user's authentication information, if known
342 * @param authType the type of authentication information being provided
343 * @param reqSource the source from which the request was made (eg web, api)
344 * @return a boolean whether the user's core profile information can be updated
345 * @throws AuthenticatorException an exception if an error occurs
346 */
347 boolean allowPermissionUpdates(User user, Object authentication, int authType, int reqSource) throws AuthenticatorException;
348
349 /**
350 * This method checks to see if the given user's preference information
351 * can be updated locally.
352 *
353 * @param user a User object that contains the data the user submitted
354 * @param authentication the user's authentication information, if known
355 * @param authType the type of authentication information being provided
356 * @param reqSource the source from which the request was made (eg web, api)
357 * @return a boolean whether the user's core profile information can be updated
358 * @throws AuthenticatorException an exception if an error occurs
359 */
360 boolean allowPreferenceUpdates(User user, Object authentication, int authType, int reqSource) throws AuthenticatorException;
361
362
363
364 }