1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package fr.paris.lutece.portal.web.rbac;
35
36 import fr.paris.lutece.portal.business.rbac.AdminRole;
37 import fr.paris.lutece.portal.business.rbac.AdminRoleHome;
38 import fr.paris.lutece.portal.business.rbac.RBAC;
39 import fr.paris.lutece.portal.business.rbac.RBACHome;
40 import fr.paris.lutece.portal.business.right.Level;
41 import fr.paris.lutece.portal.business.right.LevelHome;
42 import fr.paris.lutece.portal.business.user.AdminUser;
43 import fr.paris.lutece.portal.business.user.AdminUserHome;
44 import fr.paris.lutece.portal.service.admin.AdminUserService;
45 import fr.paris.lutece.portal.service.i18n.I18nService;
46 import fr.paris.lutece.portal.service.message.AdminMessage;
47 import fr.paris.lutece.portal.service.message.AdminMessageService;
48 import fr.paris.lutece.portal.service.rbac.RBACRemovalListenerService;
49 import fr.paris.lutece.portal.service.rbac.ResourceType;
50 import fr.paris.lutece.portal.service.rbac.ResourceTypeManager;
51 import fr.paris.lutece.portal.service.template.AppTemplateService;
52 import fr.paris.lutece.portal.service.util.AppPathService;
53 import fr.paris.lutece.portal.service.util.AppPropertiesService;
54 import fr.paris.lutece.portal.web.admin.AdminFeaturesPageJspBean;
55 import fr.paris.lutece.portal.web.constants.Messages;
56 import fr.paris.lutece.portal.web.constants.Parameters;
57 import fr.paris.lutece.portal.web.util.LocalizedPaginator;
58 import fr.paris.lutece.util.ReferenceItem;
59 import fr.paris.lutece.util.ReferenceList;
60 import fr.paris.lutece.util.html.HtmlTemplate;
61 import fr.paris.lutece.util.html.ItemNavigator;
62 import fr.paris.lutece.util.html.Paginator;
63 import fr.paris.lutece.util.sort.AttributeComparator;
64 import fr.paris.lutece.util.string.StringUtil;
65 import fr.paris.lutece.util.url.UrlItem;
66
67 import org.apache.commons.lang.StringUtils;
68
69 import java.util.ArrayList;
70 import java.util.Collection;
71 import java.util.Collections;
72 import java.util.HashMap;
73 import java.util.List;
74 import java.util.Map;
75
76 import javax.servlet.http.HttpServletRequest;
77
78
79
80
81
82 public class RoleManagementJspBean extends AdminFeaturesPageJspBean
83 {
84
85
86
87
88
89 public static final String RIGHT_MANAGE_ROLES = "CORE_RBAC_MANAGEMENT";
90
91
92
93
94 private static final long serialVersionUID = 5909246296083478844L;
95
96
97 private static final String PARAMETER_METHOD_SELECTION_ALL = "all";
98 private static final String PARAMETER_METHOD_SELECTION_CHOOSE = "choose";
99 private static final String PARAMETER_SELECTION_METHOD_CHOOSE = "choose";
100 private static final String PARAMETER_ROLE_KEY = "role_key";
101 private static final String PARAMETER_ROLE_DESCRIPTION = "role_description";
102 private static final String PARAMETER_ROLE_KEY_PREVIOUS = "role_key_previous";
103 private static final String PARAMETER_RESOURCE_TYPE = "resource_type";
104 private static final String PARAMETER_SELECT_RESOURCES_METHOD = "select_resources";
105 private static final String PARAMETER_RESOURCE_ID = "resource_id";
106 private static final String PARAMETER_PERMISSION_KEY = "permission_key";
107 private static final String PARAMETER_SELECT_PERMISSIONS_METHOD = "select_permissions";
108 private static final String PARAMETER_RBAC_ID = "rbac_id";
109 private static final String PARAMETER_AVAILABLE_USER_LIST = "available_users_list";
110 private static final String PARAMETER_CANCEL = "cancel";
111 private static final String PARAMETER_ID_USER = "id_user";
112 private static final String PARAMETER_ANCHOR = "anchor";
113
114
115 private static final String MARK_PERMISSIONS_LIST = "permissions_list";
116 private static final String MARK_RESOURCE_ID_LIST = "resource_id_list";
117 private static final String MARK_RESOURCE_TYPE_LIST = "resource_type_list";
118 private static final String MARK_CONTROLED_RESOURCE_LIST = "controled_resource_list";
119 private static final String MARK_ROLE = "role";
120 private static final String MARK_ROLE_LIST = "role_list";
121 private static final String MARK_PAGINATOR = "paginator";
122 private static final String MARK_NB_ITEMS_PER_PAGE = "nb_items_per_page";
123 private static final String MARK_ROLE_KEY = "role_key";
124 private static final String MARK_RESOURCE_TYPE = "resource_type";
125 private static final String MARK_SELECT_RESOURCES_METHOD = "select_resources";
126 private static final String MARK_RESOURCE_LIST_AVAILABLE = "resource_list_available";
127 private static final String MARK_ASSIGNED_USERS_LIST = "assigned_users_list";
128 private static final String MARK_AVAILABLE_USERS_LIST = "available_users_list";
129 private static final String MARK_ASSIGNED_USERS_NUMBER = "assigned_users_number";
130 private static final String MARK_ITEM_NAVIGATOR = "item_navigator";
131 private static final String MARK_USER_LEVELS_LIST = "user_levels";
132
133
134 private static final String PROPERTY_CONFIRM_DELETE_ROLE = "portal.rbac.message.confirmDeleteRole";
135 private static final String PROPERTY_CONFIRM_DELETE_CONTROL = "portal.rbac.message.confirmDeleteControl";
136 private static final String PROPERTY_ROLE_ALREADY_EXISTS = "portal.rbac.message.roleAlreadyExists";
137 private static final String PROPERTY_ROLE_ATTRIBUTED = "portal.rbac.message.roleAttributed";
138 private static final String PROPERTY_ROLE_CREATION_PAGETITLE = "portal.rbac.pageTitle.createRole";
139 private static final String PROPERTY_ROLE_MODIFICATION_PAGETITLE = "portal.rbac.pageTitle.modifyRole";
140 private static final String PROPERTY_ROLE_DESCRIPTION_PAGETITLE = "portal.rbac.pageTitle.viewRoleDescription";
141 private static final String PROPERTY_CHOOSE_RESOURCES_PAGETITLE = "portal.rbac.pageTitle.chooseResources";
142 private static final String PROPERTY_SELECT_RESOURCES_IDS_PAGETITLE = "portal.rbac.pageTitle.selectResourceIds";
143 private static final String PROPERTY_SELECT_PERMISSIONS_PAGETITLE = "portal.rbac.pageTitle.selectPermissions";
144 private static final String PROPERTY_MESSAGE_NO_ID_SELECTION_METHOD = "portal.rbac.message.resourceIdSelectionMethod";
145 private static final String PROPERTY_MESSAGE_ID_LIST_EMPTY = "portal.rbac.message.resourceIdListEmpty";
146 private static final String PROPERTY_MESSAGE_NO_PERMISSION_SELECTION_METHOD = "portal.rbac.message.permissionSelectionMethod";
147 private static final String PROPERTY_MESSAGE_PERMISSION_LIST_EMPTY = "portal.rbac.message.permissionListEmpty";
148 private static final String MESSAGE_ROLE_SPECIAL_CHARACTER = "portal.rbac.message.specialCharacters";
149 private static final String PROPERTY_ROLES_PER_PAGE = "paginator.roles.itemsPerPage";
150 private static final String PROPERTY_ASSIGN_USERS_PAGETITLE = "portal.rbac.assign_users.pageTitle";
151 private static final String PROPERTY_MANAGE_ROLES_PAGETITLE = "portal.rbac.manage_roles.pageTitle";
152 private static final String MESSAGE_CANNOT_REMOVE_ROLE = "portal.rbac.message.cannotRemoveRole";
153
154
155 private static final String TEMPLATE_MANAGE_ROLES = "admin/rbac/manage_roles.html";
156 private static final String TEMPLATE_CREATE_ROLE = "admin/rbac/create_role.html";
157 private static final String TEMPLATE_MODIFY_ROLE = "admin/rbac/modify_role.html";
158 private static final String TEMPLATE_VIEW_ROLE_DESCRIPTION = "admin/rbac/view_role_description.html";
159 private static final String TEMPLATE_ADD_CONTROL_TO_ROLE = "admin/rbac/add_control_to_role.html";
160 private static final String TEMPLATE_SELECT_PERMISSIONS = "admin/rbac/select_permissions.html";
161 private static final String TEMPLATE_SELECT_RESOURCE_IDS = "admin/rbac/select_resource_ids.html";
162 private static final String TEMPLATE_ASSIGN_USERS = "admin/rbac/assign_users_role.html";
163
164
165 private static final String JSP_URL_ROLES_MANAGEMENT = "ManageRoles.jsp";
166 private static final String JSP_URL_SELECT_PERMISSIONS = "SelectPermissions.jsp";
167 private static final String JSP_URL_ROLE_DESCRIPTION = "ViewRoleDescription.jsp";
168 private static final String JSP_URL_SELECT_SPECIFIC_IDS = "SelectSpecificIds.jsp";
169 private static final String JSP_URL_REMOVE_ROLE = "jsp/admin/rbac/DoRemoveRole.jsp";
170 private static final String JSP_URL_REMOVE_CONTROL_FROM_ROLE = "jsp/admin/rbac/DoRemoveControlFromRole.jsp";
171 private static final String JSP_ASSIGN_USERS_TO_ROLE = "AssignUsersRole.jsp";
172 private static final String JSP_URL_ASSIGN_USERS_TO_ROLE = "jsp/admin/rbac/AssignUsersRole.jsp";
173 private int _nItemsPerPage;
174 private int _nDefaultItemsPerPage;
175 private String _strCurrentPageIndex;
176 private ItemNavigator _itemNavigator;
177
178
179
180
181
182
183
184 public String getManageRoles( HttpServletRequest request )
185 {
186 setPageTitleProperty( PROPERTY_MANAGE_ROLES_PAGETITLE );
187
188
189 reinitItemNavigator( );
190
191 List<AdminRole> listRole = (List<AdminRole>) AdminRoleHome.findAll( );
192
193
194 String strSortedAttributeName = request.getParameter( Parameters.SORTED_ATTRIBUTE_NAME );
195 String strAscSort = null;
196
197 if ( strSortedAttributeName != null )
198 {
199 strAscSort = request.getParameter( Parameters.SORTED_ASC );
200
201 boolean bIsAscSort = Boolean.parseBoolean( strAscSort );
202
203 Collections.sort( listRole, new AttributeComparator( strSortedAttributeName, bIsAscSort ) );
204 }
205
206 _strCurrentPageIndex = Paginator.getPageIndex( request, Paginator.PARAMETER_PAGE_INDEX, _strCurrentPageIndex );
207 _nDefaultItemsPerPage = AppPropertiesService.getPropertyInt( PROPERTY_ROLES_PER_PAGE, 50 );
208 _nItemsPerPage = Paginator.getItemsPerPage( request, Paginator.PARAMETER_ITEMS_PER_PAGE, _nItemsPerPage,
209 _nDefaultItemsPerPage );
210
211 String strURL = getHomeUrl( request );
212 UrlItem url = new UrlItem( strURL );
213
214 if ( strSortedAttributeName != null )
215 {
216 url.addParameter( Parameters.SORTED_ATTRIBUTE_NAME, strSortedAttributeName );
217 }
218
219 if ( strAscSort != null )
220 {
221 url.addParameter( Parameters.SORTED_ASC, strAscSort );
222 }
223
224
225 LocalizedPaginator<AdminRole> paginator = new LocalizedPaginator<AdminRole>( listRole, _nItemsPerPage,
226 url.getUrl( ), Paginator.PARAMETER_PAGE_INDEX, _strCurrentPageIndex, getLocale( ) );
227
228 Map<String, Object> model = new HashMap<String, Object>( );
229 model.put( MARK_NB_ITEMS_PER_PAGE, Integer.toString( _nItemsPerPage ) );
230 model.put( MARK_PAGINATOR, paginator );
231 model.put( MARK_ROLE_LIST, paginator.getPageItems( ) );
232
233 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_MANAGE_ROLES, getLocale( ), model );
234
235 return getAdminPage( template.getHtml( ) );
236 }
237
238
239
240
241
242
243
244
245 public String getCreateRole( HttpServletRequest request )
246 {
247 setPageTitleProperty( PROPERTY_ROLE_CREATION_PAGETITLE );
248
249 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_CREATE_ROLE, getLocale( ) );
250
251 return getAdminPage( template.getHtml( ) );
252 }
253
254
255
256
257
258
259
260
261 public String doCreateRole( HttpServletRequest request )
262 {
263 String strRoleKey = request.getParameter( PARAMETER_ROLE_KEY );
264 String strRoleDescription = request.getParameter( PARAMETER_ROLE_DESCRIPTION );
265
266 if ( StringUtils.isBlank( strRoleKey ) || StringUtils.isBlank( strRoleDescription ) )
267 {
268 return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
269 }
270 else if ( AdminRoleHome.checkExistRole( strRoleKey ) )
271 {
272 return AdminMessageService.getMessageUrl( request, PROPERTY_ROLE_ALREADY_EXISTS, AdminMessage.TYPE_STOP );
273 }
274 else if ( !StringUtil.checkCodeKey( strRoleKey ) )
275 {
276 return AdminMessageService.getMessageUrl( request, MESSAGE_ROLE_SPECIAL_CHARACTER, AdminMessage.TYPE_STOP );
277 }
278 else
279 {
280 AdminRole role = new AdminRole( );
281 role.setKey( strRoleKey.trim( ) );
282 role.setDescription( strRoleDescription );
283 AdminRoleHome.create( role );
284
285 return JSP_URL_ROLE_DESCRIPTION + "?" + PARAMETER_ROLE_KEY + "=" + strRoleKey;
286 }
287 }
288
289
290
291
292
293
294
295
296 public String getModifyRole( HttpServletRequest request )
297 {
298 setPageTitleProperty( PROPERTY_ROLE_MODIFICATION_PAGETITLE );
299
300 String strRoleKey = request.getParameter( PARAMETER_ROLE_KEY );
301
302 HashMap<String, Object> model = new HashMap<String, Object>( );
303 model.put( MARK_ROLE, AdminRoleHome.findByPrimaryKey( strRoleKey ) );
304
305 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_MODIFY_ROLE, getLocale( ), model );
306
307 return getAdminPage( template.getHtml( ) );
308 }
309
310
311
312
313
314
315
316
317
318
319 public String doModifyRole( HttpServletRequest request )
320 {
321 String strOldRoleKey = request.getParameter( PARAMETER_ROLE_KEY_PREVIOUS );
322 String strNewRoleKey = request.getParameter( PARAMETER_ROLE_KEY );
323 String strRoleDescription = request.getParameter( PARAMETER_ROLE_DESCRIPTION );
324
325
326 if ( StringUtils.isBlank( strNewRoleKey ) || StringUtils.isBlank( strRoleDescription ) )
327 {
328 return AdminMessageService.getMessageUrl( request, Messages.MANDATORY_FIELDS, AdminMessage.TYPE_STOP );
329 }
330
331 if ( strOldRoleKey.equals( strNewRoleKey ) )
332 {
333
334 AdminRole role = AdminRoleHome.findByPrimaryKey( strOldRoleKey );
335 role.setKey( strNewRoleKey );
336 role.setDescription( strRoleDescription );
337 AdminRoleHome.update( strOldRoleKey, role );
338 }
339 else
340 {
341 if ( AdminRoleHome.checkExistRole( strNewRoleKey ) )
342 {
343 return AdminMessageService.getMessageUrl( request, PROPERTY_ROLE_ALREADY_EXISTS, AdminMessage.TYPE_STOP );
344 }
345
346
347 AdminRole role = AdminRoleHome.findByPrimaryKey( strOldRoleKey );
348 role.setKey( strNewRoleKey );
349 role.setDescription( strRoleDescription );
350 AdminRoleHome.update( strOldRoleKey, role );
351 AdminUserHome.updateUsersRole( strOldRoleKey, role );
352
353
354 RBACHome.updateRoleKey( strOldRoleKey, strNewRoleKey );
355 }
356
357 return JSP_URL_ROLE_DESCRIPTION + "?" + PARAMETER_ROLE_KEY + "=" + strNewRoleKey;
358 }
359
360
361
362
363
364
365 public String doConfirmRemoveRole( HttpServletRequest request )
366 {
367 String strRoleKey = request.getParameter( PARAMETER_ROLE_KEY );
368
369 String strDeleteUrl = JSP_URL_REMOVE_ROLE + "?" + PARAMETER_ROLE_KEY + "=" + strRoleKey;
370 String strUrl = AdminMessageService.getMessageUrl( request, PROPERTY_CONFIRM_DELETE_ROLE, strDeleteUrl,
371 AdminMessage.TYPE_CONFIRMATION );
372
373 return strUrl;
374 }
375
376
377
378
379
380
381
382 public String doRemoveRole( HttpServletRequest request )
383 {
384 String strRoleKey = request.getParameter( PARAMETER_ROLE_KEY );
385 List<String> listErrors = new ArrayList<String>( );
386
387
388 if ( AdminUserHome.checkRoleAttributed( strRoleKey ) )
389 {
390 return AdminMessageService.getMessageUrl( request, PROPERTY_ROLE_ATTRIBUTED, AdminMessage.TYPE_STOP );
391 }
392 else if ( !RBACRemovalListenerService.getService( ).checkForRemoval( strRoleKey, listErrors, getLocale( ) ) )
393 {
394 String strCause = AdminMessageService.getFormattedList( listErrors, getLocale( ) );
395 Object[] args = { strCause };
396
397 return AdminMessageService.getMessageUrl( request, MESSAGE_CANNOT_REMOVE_ROLE, args, AdminMessage.TYPE_STOP );
398 }
399 else
400 {
401
402 AdminRoleHome.remove( strRoleKey );
403
404
405 RBACHome.removeForRoleKey( strRoleKey );
406
407 return JSP_URL_ROLES_MANAGEMENT;
408 }
409 }
410
411
412
413
414
415
416 public String getViewRoleDescription( HttpServletRequest request )
417 {
418 setPageTitleProperty( PROPERTY_ROLE_DESCRIPTION_PAGETITLE );
419
420 String strRoleKey = request.getParameter( PARAMETER_ROLE_KEY );
421
422 Collection<RBAC> listResources = RBACHome.findResourcesByCode( strRoleKey );
423 I18nService.localizeCollection( listResources, getLocale( ) );
424
425 Collection<ResourceType> listResourceTypes = ResourceTypeManager.getResourceTypeList( );
426 I18nService.localizeCollection( listResourceTypes, getLocale( ) );
427
428 AdminRole adminRole = AdminRoleHome.findByPrimaryKey( strRoleKey );
429
430 if ( adminRole == null )
431 {
432 return getManageRoles( request );
433 }
434
435 Map<String, Object> model = new HashMap<String, Object>( );
436 model.put( MARK_ROLE, adminRole );
437 model.put( MARK_CONTROLED_RESOURCE_LIST, listResources );
438 model.put( MARK_RESOURCE_TYPE_LIST, listResourceTypes );
439
440 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_VIEW_ROLE_DESCRIPTION, getLocale( ), model );
441
442 return getAdminPage( template.getHtml( ) );
443 }
444
445
446
447
448
449
450 public String doConfirmRemoveControlFromRole( HttpServletRequest request )
451 {
452 String strIdControl = request.getParameter( PARAMETER_RBAC_ID );
453 String strDeleteUrl = JSP_URL_REMOVE_CONTROL_FROM_ROLE + "?" + PARAMETER_RBAC_ID + "=" + strIdControl;
454 String strUrl = AdminMessageService.getMessageUrl( request, PROPERTY_CONFIRM_DELETE_CONTROL, strDeleteUrl,
455 AdminMessage.TYPE_CONFIRMATION );
456
457 return strUrl;
458 }
459
460
461
462
463
464
465
466 public String doRemoveControlFromRole( HttpServletRequest request )
467 {
468 String strIdControl = request.getParameter( PARAMETER_RBAC_ID );
469 int nId = Integer.parseInt( strIdControl );
470
471 RBAC rbac = RBACHome.findByPrimaryKey( nId );
472
473
474 RBACHome.remove( nId );
475
476 return JSP_URL_ROLE_DESCRIPTION + "?" + PARAMETER_ROLE_KEY + "=" + rbac.getRoleKey( );
477 }
478
479
480
481
482
483
484
485
486
487
488
489
490
491 public String getAddControlToRole( HttpServletRequest request )
492 {
493 setPageTitleProperty( PROPERTY_CHOOSE_RESOURCES_PAGETITLE );
494
495 Map<String, Object> model = new HashMap<String, Object>( );
496
497 String strRoleKey = request.getParameter( PARAMETER_ROLE_KEY );
498 String strResourceType = request.getParameter( PARAMETER_RESOURCE_TYPE );
499
500 ResourceType resourceType = ResourceTypeManager.getResourceType( strResourceType );
501
502 boolean bResourceListAvailable = true;
503 ReferenceList listResources = resourceType.getResourceIdService( ).getResourceIdList( getLocale( ) );
504
505 if ( ( listResources == null ) || ( listResources.size( ) == 0 ) )
506 {
507 bResourceListAvailable = false;
508 }
509
510 model.put( MARK_ROLE_KEY, strRoleKey );
511 model.put( MARK_RESOURCE_TYPE, strResourceType );
512 model.put( MARK_RESOURCE_LIST_AVAILABLE, bResourceListAvailable );
513
514 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_ADD_CONTROL_TO_ROLE, getLocale( ), model );
515
516 return getAdminPage( template.getHtml( ) );
517 }
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533 public String doSelectResources( HttpServletRequest request )
534 {
535 String strRoleKey = request.getParameter( PARAMETER_ROLE_KEY );
536 String strResourceType = request.getParameter( PARAMETER_RESOURCE_TYPE );
537 String strSelectionMethod = request.getParameter( PARAMETER_SELECT_RESOURCES_METHOD );
538
539 if ( ( strSelectionMethod == null ) || ( strSelectionMethod.trim( ).equals( "" ) ) )
540 {
541 return AdminMessageService.getMessageUrl( request, PROPERTY_MESSAGE_NO_ID_SELECTION_METHOD,
542 AdminMessage.TYPE_STOP );
543 }
544 else if ( strSelectionMethod.equals( PARAMETER_SELECTION_METHOD_CHOOSE ) )
545 {
546 return JSP_URL_SELECT_SPECIFIC_IDS + "?" + PARAMETER_RESOURCE_TYPE + "=" + strResourceType + "&" +
547 PARAMETER_ROLE_KEY + "=" + strRoleKey + "&" + PARAMETER_SELECT_RESOURCES_METHOD + "=" + strSelectionMethod;
548 }
549 else if ( strSelectionMethod.equals( PARAMETER_METHOD_SELECTION_ALL ) )
550 {
551 return JSP_URL_SELECT_PERMISSIONS + "?" + PARAMETER_RESOURCE_TYPE + "=" + strResourceType + "&" +
552 PARAMETER_ROLE_KEY + "=" + strRoleKey + "&" + PARAMETER_SELECT_RESOURCES_METHOD + "=" + strSelectionMethod;
553 }
554 else
555 {
556 return AdminMessageService.getMessageUrl( request, PROPERTY_MESSAGE_NO_ID_SELECTION_METHOD,
557 AdminMessage.TYPE_STOP );
558 }
559 }
560
561
562
563
564
565
566
567
568 public String getSelectSpecificIds( HttpServletRequest request )
569 {
570 setPageTitleProperty( PROPERTY_SELECT_RESOURCES_IDS_PAGETITLE );
571
572 String strRoleKey = request.getParameter( PARAMETER_ROLE_KEY );
573 String strResourceType = request.getParameter( PARAMETER_RESOURCE_TYPE );
574 String strSelectionMethod = request.getParameter( PARAMETER_SELECT_RESOURCES_METHOD );
575
576 ResourceType resourceType = ResourceTypeManager.getResourceType( strResourceType );
577
578 Map<String, Object> model = new HashMap<String, Object>( );
579
580 model.put( MARK_RESOURCE_ID_LIST, resourceType.getResourceIdService( ).getResourceIdList( getLocale( ) ) );
581 model.put( MARK_ROLE_KEY, strRoleKey );
582 model.put( MARK_RESOURCE_TYPE, strResourceType );
583 model.put( MARK_SELECT_RESOURCES_METHOD, strSelectionMethod );
584
585 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_SELECT_RESOURCE_IDS, getLocale( ), model );
586
587 return getAdminPage( template.getHtml( ) );
588 }
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609 public String doSelectResourcesFromIdsList( HttpServletRequest request )
610 {
611 String strRoleKey = request.getParameter( PARAMETER_ROLE_KEY );
612 String strSelectionMethod = request.getParameter( PARAMETER_SELECT_RESOURCES_METHOD );
613 String strResourceType = request.getParameter( PARAMETER_RESOURCE_TYPE );
614 String[] strArrayResourceIds = request.getParameterValues( PARAMETER_RESOURCE_ID );
615
616 String strUrl;
617
618
619
620 if ( strSelectionMethod == null )
621 {
622 strUrl = AdminMessageService.getMessageUrl( request, PROPERTY_MESSAGE_NO_ID_SELECTION_METHOD,
623 AdminMessage.TYPE_STOP );
624 }
625 else if ( strSelectionMethod.equals( PARAMETER_METHOD_SELECTION_CHOOSE ) )
626 {
627 if ( ( strArrayResourceIds == null ) || ( strArrayResourceIds.length == 0 ) )
628 {
629 strUrl = AdminMessageService.getMessageUrl( request, PROPERTY_MESSAGE_ID_LIST_EMPTY,
630 AdminMessage.TYPE_STOP );
631 }
632 else
633 {
634 StringBuilder sbUrl = new StringBuilder( JSP_URL_SELECT_PERMISSIONS );
635 sbUrl.append( "?" );
636 sbUrl.append( PARAMETER_RESOURCE_TYPE );
637 sbUrl.append( "=" );
638 sbUrl.append( strResourceType );
639 sbUrl.append( "&" );
640 sbUrl.append( PARAMETER_ROLE_KEY );
641 sbUrl.append( "=" );
642 sbUrl.append( strRoleKey );
643 sbUrl.append( "&" );
644 sbUrl.append( PARAMETER_SELECT_RESOURCES_METHOD );
645 sbUrl.append( "=" );
646 sbUrl.append( strSelectionMethod );
647
648 for ( int i = 0; i < strArrayResourceIds.length; i++ )
649 {
650 sbUrl.append( "&" );
651 sbUrl.append( PARAMETER_RESOURCE_ID );
652 sbUrl.append( "=" );
653 sbUrl.append( strArrayResourceIds[i] );
654 }
655
656 strUrl = sbUrl.toString( );
657 }
658 }
659 else if ( strSelectionMethod.equals( PARAMETER_METHOD_SELECTION_ALL ) )
660 {
661 StringBuilder sbUrl = new StringBuilder( JSP_URL_SELECT_PERMISSIONS );
662 sbUrl.append( "?" );
663 sbUrl.append( PARAMETER_RESOURCE_TYPE );
664 sbUrl.append( "=" );
665 sbUrl.append( strResourceType );
666 sbUrl.append( "&" );
667 sbUrl.append( PARAMETER_ROLE_KEY );
668 sbUrl.append( "=" );
669 sbUrl.append( strRoleKey );
670 sbUrl.append( "&" );
671 sbUrl.append( PARAMETER_SELECT_RESOURCES_METHOD );
672 sbUrl.append( "=" );
673 sbUrl.append( strSelectionMethod );
674 strUrl = sbUrl.toString( );
675 }
676 else
677 {
678 strUrl = AdminMessageService.getMessageUrl( request, PROPERTY_MESSAGE_NO_ID_SELECTION_METHOD,
679 AdminMessage.TYPE_STOP );
680 }
681
682 return strUrl;
683 }
684
685
686
687
688
689
690
691
692
693
694
695
696 public String getSelectPermissions( HttpServletRequest request )
697 {
698 setPageTitleProperty( PROPERTY_SELECT_PERMISSIONS_PAGETITLE );
699
700 String strRoleKey = request.getParameter( PARAMETER_ROLE_KEY );
701 String strResourceType = request.getParameter( PARAMETER_RESOURCE_TYPE );
702 String strSelectionMethod = request.getParameter( PARAMETER_SELECT_RESOURCES_METHOD );
703
704 String[] strArrayResourceIds = request.getParameterValues( PARAMETER_RESOURCE_ID );
705
706
707 ReferenceList listPermissions = ResourceTypeManager.getPermissionsList( strResourceType, getLocale( ) );
708
709 Map<String, Object> model = new HashMap<String, Object>( );
710
711
712 model.put( MARK_RESOURCE_ID_LIST, strArrayResourceIds );
713
714
715 model.put( MARK_PERMISSIONS_LIST, listPermissions );
716
717
718 model.put( MARK_ROLE_KEY, strRoleKey );
719 model.put( MARK_RESOURCE_TYPE, strResourceType );
720 model.put( MARK_SELECT_RESOURCES_METHOD, strSelectionMethod );
721
722 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_SELECT_PERMISSIONS, getLocale( ), model );
723
724 return getAdminPage( template.getHtml( ) );
725 }
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749 public String doSelectPermissions( HttpServletRequest request )
750 {
751 String strRoleKey = request.getParameter( PARAMETER_ROLE_KEY );
752 String strResourceType = request.getParameter( PARAMETER_RESOURCE_TYPE );
753 String strResourcesSelectionMethod = request.getParameter( PARAMETER_SELECT_RESOURCES_METHOD );
754 String strPermissionsSelectionMethod = request.getParameter( PARAMETER_SELECT_PERMISSIONS_METHOD );
755
756 String[] strArrayResourceIds;
757 String[] strArrayPermissionKeys;
758
759
760 if ( ( strResourcesSelectionMethod != null ) &&
761 strResourcesSelectionMethod.equals( PARAMETER_METHOD_SELECTION_ALL ) )
762 {
763 strArrayResourceIds = new String[1];
764 strArrayResourceIds[0] = RBAC.WILDCARD_RESOURCES_ID;
765 }
766 else
767 {
768 strArrayResourceIds = request.getParameterValues( PARAMETER_RESOURCE_ID );
769 }
770
771
772
773 if ( strPermissionsSelectionMethod == null )
774 {
775 return AdminMessageService.getMessageUrl( request, PROPERTY_MESSAGE_NO_PERMISSION_SELECTION_METHOD,
776 AdminMessage.TYPE_STOP );
777 }
778 else if ( strPermissionsSelectionMethod.equals( PARAMETER_METHOD_SELECTION_CHOOSE ) )
779 {
780 strArrayPermissionKeys = request.getParameterValues( PARAMETER_PERMISSION_KEY );
781
782 if ( ( strArrayPermissionKeys == null ) || ( strArrayPermissionKeys.length == 0 ) )
783 {
784 return AdminMessageService.getMessageUrl( request, PROPERTY_MESSAGE_PERMISSION_LIST_EMPTY,
785 AdminMessage.TYPE_STOP );
786 }
787 }
788 else if ( strPermissionsSelectionMethod.equals( PARAMETER_METHOD_SELECTION_ALL ) )
789 {
790 strArrayPermissionKeys = new String[1];
791 strArrayPermissionKeys[0] = RBAC.WILDCARD_PERMISSIONS_KEY;
792 }
793 else
794 {
795 return AdminMessageService.getMessageUrl( request, PROPERTY_MESSAGE_NO_PERMISSION_SELECTION_METHOD,
796 AdminMessage.TYPE_STOP );
797 }
798
799
800 for ( int i = 0; i < strArrayResourceIds.length; i++ )
801 {
802 for ( int j = 0; j < strArrayPermissionKeys.length; j++ )
803 {
804 RBAC rbac = new RBAC( );
805 rbac.setRoleKey( strRoleKey );
806 rbac.setResourceTypeKey( strResourceType );
807 rbac.setResourceId( strArrayResourceIds[i] );
808 rbac.setPermissionKey( strArrayPermissionKeys[j] );
809 RBACHome.create( rbac );
810 }
811 }
812
813 return JSP_URL_ROLE_DESCRIPTION + "?" + PARAMETER_ROLE_KEY + "=" + strRoleKey;
814 }
815
816
817
818
819
820
821
822 public String getAssignUsers( HttpServletRequest request )
823 {
824 Map<String, Object> model = new HashMap<String, Object>( );
825 setPageTitleProperty( PROPERTY_ASSIGN_USERS_PAGETITLE );
826
827 String strBaseUrl = AppPathService.getBaseUrl( request ) + JSP_URL_ASSIGN_USERS_TO_ROLE;
828 UrlItem url = new UrlItem( strBaseUrl );
829
830
831 String strRoleKey = request.getParameter( PARAMETER_ROLE_KEY );
832 AdminRole role = AdminRoleHome.findByPrimaryKey( strRoleKey );
833
834
835 List<AdminUser> listAssignedUsers = new ArrayList<AdminUser>( );
836
837 for ( AdminUser user : AdminUserHome.findByRole( strRoleKey ) )
838 {
839
840 if ( ( user.getUserLevel( ) > getUser( ).getUserLevel( ) ) || ( getUser( ).isAdmin( ) ) )
841 {
842 listAssignedUsers.add( user );
843 }
844 }
845
846 List<AdminUser> listFilteredUsers = AdminUserService.getFilteredUsersInterface( listAssignedUsers, request,
847 model, url );
848
849
850 ReferenceList listAvailableUsers = new ReferenceList( );
851 ReferenceItem itemUser = null;
852 boolean bAssigned;
853
854 for ( AdminUser user : AdminUserHome.findUserList( ) )
855 {
856 itemUser = new ReferenceItem( );
857 itemUser.setCode( Integer.toString( user.getUserId( ) ) );
858 itemUser.setName( user.getAccessCode( ) + "(" + user.getFirstName( ) + " " + user.getLastName( ) + ")" );
859 bAssigned = Boolean.FALSE;
860
861 for ( AdminUser assignedUser : listAssignedUsers )
862 {
863 if ( Integer.toString( assignedUser.getUserId( ) ).equals( itemUser.getCode( ) ) )
864 {
865 bAssigned = Boolean.TRUE;
866
867 break;
868 }
869 }
870
871
872 if ( !bAssigned &&
873 ( ( user.getUserLevel( ) > getUser( ).getUserLevel( ) ) || ( getUser( ).isAdmin( ) ) ) )
874 {
875 listAvailableUsers.add( itemUser );
876 }
877 }
878
879
880 String strSortedAttributeName = request.getParameter( Parameters.SORTED_ATTRIBUTE_NAME );
881 String strAscSort = null;
882
883 if ( strSortedAttributeName != null )
884 {
885 strAscSort = request.getParameter( Parameters.SORTED_ASC );
886
887 boolean bIsAscSort = Boolean.parseBoolean( strAscSort );
888
889 Collections.sort( listFilteredUsers, new AttributeComparator( strSortedAttributeName, bIsAscSort ) );
890 }
891
892 _strCurrentPageIndex = Paginator.getPageIndex( request, Paginator.PARAMETER_PAGE_INDEX, _strCurrentPageIndex );
893 _nDefaultItemsPerPage = AppPropertiesService.getPropertyInt( PROPERTY_ROLES_PER_PAGE, 50 );
894 _nItemsPerPage = Paginator.getItemsPerPage( request, Paginator.PARAMETER_ITEMS_PER_PAGE, _nItemsPerPage,
895 _nDefaultItemsPerPage );
896
897 if ( strSortedAttributeName != null )
898 {
899 url.addParameter( Parameters.SORTED_ATTRIBUTE_NAME, strSortedAttributeName );
900 }
901
902 if ( strAscSort != null )
903 {
904 url.addParameter( Parameters.SORTED_ASC, strAscSort );
905 }
906
907
908 setItemNavigator( role.getKey( ), url.getUrl( ) );
909
910
911 url.addParameter( PARAMETER_ROLE_KEY, role.getKey( ) );
912
913 LocalizedPaginator<AdminUser> paginator = new LocalizedPaginator<AdminUser>( listFilteredUsers, _nItemsPerPage,
914 url.getUrl( ), Paginator.PARAMETER_PAGE_INDEX, _strCurrentPageIndex, getLocale( ) );
915
916
917 Collection<Level> filteredLevels = new ArrayList<Level>( );
918
919 for ( Level level : LevelHome.getLevelsList( ) )
920 {
921 if ( getUser( ).isAdmin( ) || getUser( ).hasRights( level.getId( ) ) )
922 {
923 filteredLevels.add( level );
924 }
925 }
926
927 model.put( MARK_ROLE, role );
928 model.put( MARK_USER_LEVELS_LIST, filteredLevels );
929 model.put( MARK_AVAILABLE_USERS_LIST, listAvailableUsers );
930 model.put( MARK_ASSIGNED_USERS_LIST, paginator.getPageItems( ) );
931 model.put( MARK_ASSIGNED_USERS_NUMBER, listAssignedUsers.size( ) );
932 model.put( MARK_ITEM_NAVIGATOR, _itemNavigator );
933 model.put( MARK_PAGINATOR, paginator );
934 model.put( MARK_NB_ITEMS_PER_PAGE, Integer.toString( _nItemsPerPage ) );
935
936 HtmlTemplate template = AppTemplateService.getTemplate( TEMPLATE_ASSIGN_USERS, getLocale( ), model );
937
938 return getAdminPage( template.getHtml( ) );
939 }
940
941
942
943
944
945
946
947 public String doAssignUsers( HttpServletRequest request )
948 {
949 String strReturn;
950
951 String strActionCancel = request.getParameter( PARAMETER_CANCEL );
952
953 if ( strActionCancel != null )
954 {
955 strReturn = JSP_URL_ROLES_MANAGEMENT;
956 }
957 else
958 {
959 String strRoleKey = request.getParameter( PARAMETER_ROLE_KEY );
960
961
962 String[] arrayUsersIds = request.getParameterValues( PARAMETER_AVAILABLE_USER_LIST );
963
964 if ( ( arrayUsersIds != null ) )
965 {
966 for ( int i = 0; i < arrayUsersIds.length; i++ )
967 {
968 int nUserId = Integer.parseInt( arrayUsersIds[i] );
969 AdminUser user = AdminUserHome.findByPrimaryKey( nUserId );
970
971 if ( !AdminUserHome.hasRole( user, strRoleKey ) )
972 {
973 AdminUserHome.createRoleForUser( user.getUserId( ), strRoleKey );
974 }
975 }
976 }
977
978 strReturn = JSP_ASSIGN_USERS_TO_ROLE + "?" + PARAMETER_ROLE_KEY + "=" + strRoleKey;
979 }
980
981 return strReturn;
982 }
983
984
985
986
987
988
989 public String doUnAssignUser( HttpServletRequest request )
990 {
991 String strRoleKey = request.getParameter( PARAMETER_ROLE_KEY );
992 int nIdUser = Integer.parseInt( request.getParameter( PARAMETER_ID_USER ) );
993 String strAnchor = request.getParameter( PARAMETER_ANCHOR );
994
995 AdminUser adminUser = AdminUserHome.findByPrimaryKey( nIdUser );
996
997 if ( adminUser != null )
998 {
999 AdminUserHome.removeRoleForUser( nIdUser, strRoleKey );
1000 }
1001
1002 return JSP_ASSIGN_USERS_TO_ROLE + "?" + PARAMETER_ROLE_KEY + "=" + strRoleKey + "#" + strAnchor;
1003 }
1004
1005
1006
1007
1008
1009
1010 private void setItemNavigator( String strRoleKey, String strUrl )
1011 {
1012 if ( _itemNavigator == null )
1013 {
1014 List<String> listIdsRight = new ArrayList<String>( );
1015 int nCurrentItemId = 0;
1016 int nIndex = 0;
1017
1018 for ( AdminRole role : AdminRoleHome.findAll( ) )
1019 {
1020 if ( ( role != null ) && StringUtils.isNotBlank( role.getKey( ) ) )
1021 {
1022 listIdsRight.add( role.getKey( ) );
1023
1024 if ( role.getKey( ).equals( strRoleKey ) )
1025 {
1026 nCurrentItemId = nIndex;
1027 }
1028
1029 nIndex++;
1030 }
1031 }
1032
1033 _itemNavigator = new ItemNavigator( listIdsRight, nCurrentItemId, strUrl, PARAMETER_ROLE_KEY );
1034 }
1035 else
1036 {
1037 _itemNavigator.setCurrentItemId( strRoleKey );
1038 }
1039 }
1040
1041
1042
1043
1044 private void reinitItemNavigator( )
1045 {
1046 _itemNavigator = null;
1047 }
1048 }