1 31 32 package org.opencms.workplace.commons; 33 34 import org.opencms.file.CmsGroup; 35 import org.opencms.file.CmsObject; 36 import org.opencms.file.CmsResource; 37 import org.opencms.file.CmsResourceFilter; 38 import org.opencms.jsp.CmsJspActionElement; 39 import org.opencms.main.CmsException; 40 import org.opencms.main.CmsLog; 41 import org.opencms.security.CmsAccessControlEntry; 42 import org.opencms.security.CmsAccessControlList; 43 import org.opencms.security.CmsPermissionSet; 44 import org.opencms.security.CmsRole; 45 import org.opencms.security.I_CmsPrincipal; 46 import org.opencms.util.CmsStringUtil; 47 import org.opencms.util.CmsUUID; 48 import org.opencms.workplace.CmsDialog; 49 import org.opencms.workplace.CmsWorkplaceSettings; 50 51 import java.util.ArrayList ; 52 import java.util.HashMap ; 53 import java.util.Iterator ; 54 import java.util.List ; 55 import java.util.Map ; 56 import java.util.Set ; 57 58 import javax.servlet.http.HttpServletRequest ; 59 import javax.servlet.http.HttpServletResponse ; 60 import javax.servlet.jsp.PageContext ; 61 62 import org.apache.commons.logging.Log; 63 64 79 public class CmsChacc extends CmsDialog { 80 81 82 public static final int ACTION_ADDACE = 300; 83 84 85 public static final int ACTION_DELETE = 200; 86 87 88 public static final int ACTION_INTERNALUSE = 400; 89 90 91 public static final String DIALOG_ADDACE = "addace"; 92 93 94 public static final String DIALOG_DELETE = "delete"; 95 96 97 public static final String DIALOG_INTERNALUSE = "internaluse"; 98 99 100 public static final String DIALOG_TYPE = "chacc"; 101 102 103 public static final String PARAM_INHERIT = "inherit"; 104 105 106 public static final String PARAM_INTERNAL = "internal"; 107 108 109 public static final String PARAM_NAME = "name"; 110 111 112 public static final String PARAM_OVERWRITEINHERITED = "overwriteinherited"; 113 114 115 public static final String PARAM_RESPONSIBLE = "responsible"; 116 117 118 public static final String PARAM_TYPE = "type"; 119 120 121 public static final String PARAM_VIEW = "view"; 122 123 124 public static final String PERMISSION_ALLOW = "allow"; 125 126 127 public static final String PERMISSION_DENY = "deny"; 128 129 130 private static final Log LOG = CmsLog.getLog(CmsChacc.class); 131 132 133 private CmsPermissionSet m_curPermissions; 134 135 136 private boolean m_editable; 137 138 139 private ArrayList m_errorMessages = new ArrayList (); 140 141 142 private boolean m_inherit; 143 144 145 private String m_paramName; 146 147 148 private String m_paramType; 149 150 151 private Set m_permissionKeys = CmsPermissionSet.getPermissionKeys(); 152 153 154 private boolean m_showInheritedPermissions; 155 156 157 private String [] m_types = {I_CmsPrincipal.PRINCIPAL_GROUP, I_CmsPrincipal.PRINCIPAL_USER}; 158 159 160 private int[] m_typesInt = {CmsAccessControlEntry.ACCESS_FLAGS_GROUP, CmsAccessControlEntry.ACCESS_FLAGS_USER}; 161 162 163 private String [] m_typesLocalized = new String [2]; 164 165 170 public CmsChacc(CmsJspActionElement jsp) { 171 172 super(jsp); 173 m_errorMessages.clear(); 174 } 175 176 183 public CmsChacc(PageContext context, HttpServletRequest req, HttpServletResponse res) { 184 185 this(new CmsJspActionElement(context, req, res)); 186 } 187 188 193 public boolean actionAddAce() { 194 195 String file = getParamResource(); 196 String name = getParamName(); 197 String type = getParamType(); 198 int arrayPosition = -1; 199 try { 200 arrayPosition = Integer.parseInt(type); 201 } catch (Exception e) { 202 if (LOG.isInfoEnabled()) { 204 LOG.info(e.getLocalizedMessage()); 205 } 206 } 207 208 if (checkNewEntry(name, arrayPosition)) { 209 String permissionString = ""; 210 if (getInheritOption() && getSettings().getUserSettings().getDialogPermissionsInheritOnFolder()) { 211 permissionString = "+i"; 213 } 214 try { 215 checkLock(getParamResource()); 217 getCms().chacc(file, getTypes()[arrayPosition], name, permissionString); 218 return true; 219 } catch (CmsException e) { 220 m_errorMessages.add(e.getMessage()); 221 } 222 } 223 return false; 224 } 225 226 232 public boolean actionInternalUse(HttpServletRequest request) { 233 234 String internal = request.getParameter(PARAM_INTERNAL); 235 236 CmsResource resource; 237 boolean internalValue = false; 238 if (internal != null) { 239 internalValue = true; 240 } 241 try { 242 resource = getCms().readResource(getParamResource(), CmsResourceFilter.ALL); 243 244 int flags = resource.getFlags(); 245 246 if (internalValue) { 247 if ((flags & CmsResource.FLAG_INTERNAL) == 0) { 248 flags += CmsResource.FLAG_INTERNAL; 249 } 250 } else { 251 if ((flags & CmsResource.FLAG_INTERNAL) > 0) { 252 flags -= CmsResource.FLAG_INTERNAL; 253 } 254 } 255 256 getCms().lockResource(getParamResource()); 257 getCms().chflags(getParamResource(), flags); 258 259 } catch (CmsException e) { 260 m_errorMessages.add(key(Messages.ERR_MODIFY_INTERNAL_FLAG_0)); 261 return false; 262 } 263 return true; 264 } 265 266 272 public boolean actionModifyAce(HttpServletRequest request) { 273 274 String file = getParamResource(); 275 276 String name = getParamName(); 278 String type = getParamType(); 279 String inherit = request.getParameter(PARAM_INHERIT); 280 String overWriteInherited = request.getParameter(PARAM_OVERWRITEINHERITED); 281 String responsible = request.getParameter(PARAM_RESPONSIBLE); 282 283 Set permissionKeys = CmsPermissionSet.getPermissionKeys(); 285 int allowValue = 0; 286 int denyValue = 0; 287 String key, param; 288 int value, paramInt; 289 290 Iterator i = permissionKeys.iterator(); 291 while (i.hasNext()) { 293 key = (String )i.next(); 294 value = CmsPermissionSet.getPermissionValue(key); 295 try { 297 param = request.getParameter(value + PERMISSION_ALLOW); 298 paramInt = Integer.parseInt(param); 299 allowValue |= paramInt; 300 } catch (Exception e) { 301 if (LOG.isInfoEnabled()) { 303 LOG.info(e.getLocalizedMessage()); 304 } 305 } 306 try { 307 param = request.getParameter(value + PERMISSION_DENY); 308 paramInt = Integer.parseInt(param); 309 denyValue |= paramInt; 310 } catch (Exception e) { 311 if (LOG.isInfoEnabled()) { 313 LOG.info(e.getLocalizedMessage()); 314 } 315 } 316 317 } 318 319 try { 321 List allEntries = getCms().getAccessControlEntries(file, false); 322 int flags = 0; 323 for (int k = 0; k < allEntries.size(); k++) { 324 CmsAccessControlEntry curEntry = (CmsAccessControlEntry)allEntries.get(k); 325 String curType = getEntryType(curEntry.getFlags()); 326 String curName = getCms().lookupPrincipal(curEntry.getPrincipal()).getName(); 327 if (curName.equals(name) && curType.equals(type)) { 328 flags = curEntry.getFlags(); 329 break; 330 } 331 } 332 333 if (Boolean.valueOf(inherit).booleanValue()) { 335 flags |= CmsAccessControlEntry.ACCESS_FLAGS_INHERIT; 336 } else { 337 flags &= ~CmsAccessControlEntry.ACCESS_FLAGS_INHERIT; 338 } 339 340 if (Boolean.valueOf(overWriteInherited).booleanValue()) { 342 flags |= CmsAccessControlEntry.ACCESS_FLAGS_OVERWRITE; 343 } else { 344 flags &= ~CmsAccessControlEntry.ACCESS_FLAGS_OVERWRITE; 345 } 346 347 if (Boolean.valueOf(responsible).booleanValue()) { 348 flags |= CmsAccessControlEntry.ACCESS_FLAGS_RESPONSIBLE; 349 } else { 350 flags &= ~CmsAccessControlEntry.ACCESS_FLAGS_RESPONSIBLE; 351 } 352 353 checkLock(getParamResource()); 355 getCms().chacc(file, type, name, allowValue, denyValue, flags); 357 return true; 358 } catch (CmsException e) { 359 m_errorMessages.add(key(Messages.ERR_CHACC_MODIFY_ENTRY_0)); 360 return false; 361 } 362 } 363 364 369 public boolean actionRemoveAce() { 370 371 String file = getParamResource(); 372 String name = getParamName(); 373 String type = getParamType(); 374 try { 375 checkLock(getParamResource()); 377 getCms().rmacc(file, type, name); 378 return true; 379 } catch (CmsException e) { 380 m_errorMessages.add(key(Messages.ERR_CHACC_DELETE_ENTRY_0)); 381 return false; 382 } 383 } 384 385 390 public String buildCurrentPermissions() { 391 392 StringBuffer result = new StringBuffer (dialogToggleStart(key(Messages.GUI_PERMISSION_USER_0), "userpermissions", getSettings().getUserSettings().getDialogExpandUserPermissions())); 393 result.append(dialogWhiteBoxStart()); 394 result.append(buildPermissionEntryForm(getSettings().getUser().getId(), getCurPermissions(), false, false)); 395 result.append(dialogWhiteBoxEnd()); 396 result.append("</div>\n"); 397 return result.toString(); 398 } 399 400 405 public String buildErrorMessages() { 406 407 StringBuffer result = new StringBuffer (8); 408 String errorMessages = getErrorMessagesString(); 409 if (!"".equals(errorMessages)) { 410 result.append(dialogBlock(HTML_START, key(Messages.GUI_PERMISSION_ERROR_0), true)); 411 result.append(errorMessages); 412 result.append(dialogBlockEnd()); 413 } 414 return result.toString(); 415 } 416 417 423 public static String buildSummaryDetailsButtons(CmsDialog wp) { 424 StringBuffer result = new StringBuffer (512); 425 result.append("<table border=\"0\">\n<tr>\n\t<td>"); 427 result.append(wp.key(Messages.GUI_PERMISSION_SELECT_VIEW_0)); 428 result.append("</td>\n"); 429 String selectedView = wp.getSettings().getPermissionDetailView(); 430 result.append("\t<form action=\"").append(wp.getDialogUri()).append( 431 "\" method=\"post\" name=\"selectshortview\">\n"); 432 result.append("\t<td>\n"); 433 result.append("\t<input type=\"hidden\" name=\""); 434 result.append(PARAM_VIEW); 435 result.append("\" value=\"short\">\n"); 436 wp.setParamAction(null); 438 result.append(wp.paramsAsHidden()); 439 result.append("\t<input type=\"submit\" class=\"dialogbutton\" value=\"").append(wp.key(Messages.GUI_LABEL_SUMMARY_0)).append( 440 "\""); 441 if (!"long".equals(selectedView)) { 442 result.append(" disabled=\"disabled\""); 443 } 444 result.append(">\n"); 445 result.append("\t</td>\n"); 446 result.append("\t</form>\n\t<form action=\"").append(wp.getDialogUri()).append( 447 "\" method=\"post\" name=\"selectlongview\">\n"); 448 result.append("\t<td>\n"); 449 result.append("\t<input type=\"hidden\" name=\""); 450 result.append(PARAM_VIEW); 451 result.append("\" value=\"long\">\n"); 452 result.append(wp.paramsAsHidden()); 453 result.append("\t<input type=\"submit\" class=\"dialogbutton\" value=\"").append(wp.key(Messages.GUI_LABEL_DETAILS_0)).append( 454 "\""); 455 if ("long".equals(selectedView)) { 456 result.append(" disabled=\"disabled\""); 457 } 458 result.append(">\n"); 459 result.append("\t</td>\n\t</form>\n"); 460 result.append("</tr>\n</table>\n"); 461 return result.toString(); 462 } 463 464 465 470 public String buildRightsList() { 471 472 StringBuffer result = new StringBuffer (dialogToggleStart(key(Messages.GUI_PERMISSION_BEQUEATH_SUBFOLDER_0), "inheritedpermissions", 473 getSettings().getUserSettings().getDialogExpandInheritedPermissions() || getShowInheritedPermissions())); 474 475 477 List allEntries = new ArrayList (); 479 try { 480 allEntries = getCms().getAccessControlEntries(getParamResource(), true); 481 } catch (CmsException e) { 482 if (LOG.isInfoEnabled()) { 484 LOG.info(e.getLocalizedMessage()); 485 } 486 } 487 488 Map parents = new HashMap (); 490 String path = CmsResource.getParentFolder(getParamResource()); 491 List parentResources = new ArrayList (); 492 try { 493 parentResources = getCms().readPath(path, CmsResourceFilter.IGNORE_EXPIRATION); 495 } catch (CmsException e) { 496 if (LOG.isInfoEnabled()) { 498 LOG.info(e.getLocalizedMessage()); 499 } 500 } 501 Iterator k = parentResources.iterator(); 502 while (k.hasNext()) { 503 CmsResource curRes = (CmsResource)k.next(); 505 parents.put(curRes.getResourceId(), curRes.getRootPath()); 506 } 507 508 ArrayList ownEntries = new ArrayList (0); 510 ArrayList inheritedEntries = new ArrayList (0); 511 512 for (int i = 0; i < allEntries.size(); i++) { 513 CmsAccessControlEntry curEntry = (CmsAccessControlEntry)allEntries.get(i); 514 if (curEntry.isInherited()) { 515 if ("long".equals(getSettings().getPermissionDetailView())) { 517 inheritedEntries.add(curEntry); 518 } 519 } else { 520 ownEntries.add(curEntry); 522 } 523 } 524 525 result.append(dialogWhiteBox(HTML_START)); 527 result.append(buildInheritedList(inheritedEntries, parents)); 528 result.append(dialogWhiteBox(HTML_END)); 529 530 result.append("</div>"); 532 533 result.append(buildAddForm()); 535 536 result.append(buildResourceList(ownEntries)); 538 539 return result.toString(); 540 } 541 542 547 public CmsPermissionSet getCurPermissions() { 548 549 return m_curPermissions; 550 } 551 552 557 public ArrayList getErrorMessages() { 558 559 return m_errorMessages; 560 } 561 562 567 public String getErrorMessagesString() { 568 569 StringBuffer errors = new StringBuffer (8); 570 Iterator i = getErrorMessages().iterator(); 571 while (i.hasNext()) { 572 errors.append((String )i.next()); 573 if (i.hasNext()) { 574 errors.append("<br>"); 575 } 576 } 577 return errors.toString(); 578 } 579 580 588 public String getParamName() { 589 590 return m_paramName; 591 } 592 593 601 public String getParamType() { 602 603 return m_paramType; 604 } 605 606 611 public void init() { 612 613 String userName = getSettings().getUser().getName(); 615 616 if (m_typesLocalized[0] == null) { 617 m_typesLocalized[0] = key(Messages.GUI_LABEL_GROUP_0); 618 m_typesLocalized[1] = key(Messages.GUI_LABEL_USER_0); 619 } 620 621 setEditable(false); 623 setInheritOption(false); 624 String resName = getParamResource(); 625 626 try { 627 setCurPermissions(getCms().getPermissions(getParamResource(), userName)); 629 630 CmsResource resource = getCms().readResource(getParamResource(), CmsResourceFilter.ALL); 632 if (resource.isFolder()) { 633 setInheritOption(true); 635 if (! resName.endsWith("/")) { 636 resName += "/"; 638 } 639 } 640 } catch (CmsException e) { 641 if (LOG.isInfoEnabled()) { 643 LOG.info(e.getLocalizedMessage()); 644 } 645 } 646 647 if ((!getCms().getRequestContext().currentProject().isOnlineProject() && getCms().isInsideCurrentProject(resName)) 649 && (getCms().hasRole(CmsRole.VFS_MANAGER) || ((m_curPermissions.getAllowedPermissions() 650 & CmsPermissionSet.PERMISSION_CONTROL) > 0 && !((m_curPermissions.getDeniedPermissions() 651 & CmsPermissionSet.PERMISSION_CONTROL) > 0)))) { 652 setEditable(true); 653 } 654 } 655 656 661 public void setParamName(String value) { 662 663 m_paramName = value; 664 } 665 666 671 public void setParamType(String value) { 672 673 m_paramType = value; 674 } 675 676 683 protected boolean checkNewEntry(String name, int arrayPosition) { 684 685 m_errorMessages.clear(); 686 boolean inArray = false; 687 if (getTypes()[arrayPosition] != null) { 688 inArray = true; 689 } 690 if (!inArray) { 691 m_errorMessages.add(key(Messages.ERR_PERMISSION_SELECT_TYPE_0)); 692 } 693 if (CmsStringUtil.isEmptyOrWhitespaceOnly(name)) { 694 m_errorMessages.add(key(Messages.ERR_MISSING_GROUP_OR_USER_NAME_0)); 695 } 696 if (m_errorMessages.size() > 0) { 697 return false; 698 } 699 return true; 700 } 701 702 709 protected String getConnectedResource(CmsAccessControlEntry entry, Map parents) { 710 711 CmsUUID resId = entry.getResource(); 712 String resName = (String )parents.get(resId); 713 if (CmsStringUtil.isNotEmptyOrWhitespaceOnly(resName)) { 714 return resName; 715 } 716 return resId.toString(); 717 } 718 719 724 protected boolean getEditable() { 725 726 return m_editable; 727 } 728 729 735 protected String getEntryType(int flags) { 736 737 for (int i = 0; i < getTypes().length; i++) { 738 if ((flags & getTypesInt()[i]) > 0) { 739 return getTypes()[i]; 740 } 741 } 742 return "Unknown"; 743 } 744 745 751 protected int getEntryTypeInt(int flags) { 752 753 for (int i = 0; i < getTypes().length; i++) { 754 if ((flags & getTypesInt()[i]) > 0) { 755 return i; 756 } 757 } 758 return -1; 759 } 760 761 766 protected boolean getInheritOption() { 767 768 return m_inherit; 769 } 770 771 776 public boolean getShowInheritedPermissions() { 777 778 return m_showInheritedPermissions; 779 } 780 781 786 protected String [] getTypes() { 787 788 return m_types; 789 } 790 791 796 protected int[] getTypesInt() { 797 798 return m_typesInt; 799 } 800 801 806 protected String [] getTypesLocalized() { 807 808 return m_typesLocalized; 809 } 810 811 814 protected void initWorkplaceRequestValues(CmsWorkplaceSettings settings, HttpServletRequest request) { 815 816 fillParamValues(request); 818 819 String detail = request.getParameter(PARAM_VIEW); 821 if (detail != null) { 822 settings.setPermissionDetailView(detail); 823 setShowInheritedPermissions(true); 824 } 825 826 if (DIALOG_TYPE.equals(getParamAction())) { 828 setAction(ACTION_DEFAULT); 829 } else if (DIALOG_SET.equals(getParamAction())) { 830 setAction(ACTION_SET); 831 } else if (DIALOG_DELETE.equals(getParamAction())) { 832 setAction(ACTION_DELETE); 833 } else if (DIALOG_ADDACE.equals(getParamAction())) { 834 setAction(ACTION_ADDACE); 835 } else if (DIALOG_CANCEL.equals(getParamAction())) { 836 setAction(ACTION_CANCEL); 837 } else if (DIALOG_INTERNALUSE.equals(getParamAction())) { 838 setAction(ACTION_INTERNALUSE); 839 } else { 840 setAction(ACTION_DEFAULT); 841 setParamTitle(key(Messages.GUI_PERMISSION_CHANGE_1, new Object [] {CmsResource.getName(getParamResource())})); 843 } 844 845 } 846 847 854 protected boolean isAllowed(CmsPermissionSet p, int value) { 855 856 if ((p.getAllowedPermissions() & value) > 0) { 857 return true; 858 } 859 return false; 860 } 861 862 869 protected boolean isDenied(CmsPermissionSet p, int value) { 870 871 if ((p.getDeniedPermissions() & value) > 0) { 872 return true; 873 } 874 return false; 875 } 876 877 883 protected boolean isInheriting(int flags) { 884 885 if ((flags & CmsAccessControlEntry.ACCESS_FLAGS_INHERIT) > 0) { 886 return true; 887 } 888 return false; 889 } 890 891 897 protected boolean isOverWritingInherited(int flags) { 898 899 if ((flags & CmsAccessControlEntry.ACCESS_FLAGS_OVERWRITE) > 0) { 900 return true; 901 } 902 return false; 903 } 904 905 911 protected boolean isResponsible(int flags) { 912 913 if ((flags & CmsAccessControlEntry.ACCESS_FLAGS_RESPONSIBLE) > 0) { 914 return true; 915 } 916 return false; 917 } 918 919 925 protected void setCurPermissions(CmsPermissionSet value) { 926 927 m_curPermissions = value; 928 } 929 930 936 protected void setEditable(boolean value) { 937 938 m_editable = value; 939 } 940 941 948 protected void setInheritOption(boolean value) { 949 950 m_inherit = value; 951 } 952 953 958 protected void setShowInheritedPermissions(boolean showInheritedPermissions) { 959 960 m_showInheritedPermissions = showInheritedPermissions; 961 } 962 963 968 private String buildAddForm() { 969 970 StringBuffer result = new StringBuffer (256); 971 972 if (getEditable()) { 974 result.append(dialogSpacer()); 975 result.append(dialogBlockStart(key(Messages.GUI_PERMISSION_ADD_ACE_0))); 976 977 ArrayList options = new ArrayList (); 979 ArrayList optionValues = new ArrayList (); 980 for (int i = 0; i < getTypes().length; i++) { 981 options.add(getTypesLocalized()[i]); 982 optionValues.add(Integer.toString(i)); 983 } 984 985 result.append("<form action=\"").append(getDialogUri()).append( 987 "\" method=\"post\" name=\"add\" class=\"nomargin\">\n"); 988 setParamAction(DIALOG_ADDACE); 990 setParamType(null); 991 setParamName(null); 992 result.append(paramsAsHidden()); 993 result.append("<table border=\"0\" width=\"100%\">\n"); 994 result.append("<tr>\n"); 995 result.append("\t<td>").append(buildSelect("name=\"" + PARAM_TYPE + "\"", options, optionValues, -1)).append("</td>\n"); 996 result.append("\t<td class=\"maxwidth\"><input type=\"text\" class=\"maxwidth\" name=\""); 997 result.append(PARAM_NAME); 998 result.append("\" value=\"\"></td>\n"); 999 result.append("\t<td><input class=\"dialogbutton\" style=\"width: 60px;\" type=\"button\" value=\""); 1000 result.append(key(Messages.GUI_LABEL_SEARCH_0)).append( 1001 "\" onClick=\"javascript:openDialogWin('chaccbrowser.jsp','UserGroup');\"></td>\n"); 1002 result.append("\t<td><input class=\"dialogbutton\" type=\"submit\" value=\"").append(key(Messages.GUI_LABEL_ADD_0)).append( 1003 "\"></td>\n"); 1004 result.append("</tr>\n"); 1005 result.append("</form>\n"); 1006 result.append("</table>\n"); 1007 1008 result.append(dialogBlockEnd()); 1009 } 1010 return result.toString(); 1011 } 1012 1013 1020 private StringBuffer buildInheritedList(ArrayList entries, Map parents) { 1021 1022 StringBuffer result = new StringBuffer (32); 1023 String view = getSettings().getPermissionDetailView(); 1024 Iterator i; 1025 1026 if ("long".equals(view)) { 1028 i = entries.iterator(); 1029 while (i.hasNext()) { 1030 CmsAccessControlEntry curEntry = (CmsAccessControlEntry)i.next(); 1031 result.append(buildPermissionEntryForm(curEntry, false, true, getConnectedResource(curEntry, parents))); 1033 } 1034 } else { 1035 try { 1037 CmsAccessControlList acList = getCms().getAccessControlList(getParamResource(), true); 1039 Set principalSet = acList.getPrincipals(); 1040 i = principalSet.iterator(); 1041 while (i.hasNext()) { 1042 CmsUUID principalId = (CmsUUID)i.next(); 1043 I_CmsPrincipal principal = getCms().lookupPrincipal(principalId); 1044 CmsPermissionSet permissions = acList.getPermissions(principal); 1045 result.append(buildPermissionEntryForm(principalId, permissions, false, true)); 1047 } 1048 } catch (CmsException e) { 1049 if (LOG.isInfoEnabled()) { 1051 LOG.info(e.getLocalizedMessage()); 1052 } 1053 } 1054 } 1055 return result; 1056 } 1057 1058 1063 private String buildInternalForm() { 1064 1065 StringBuffer result = new StringBuffer (128); 1066 1067 CmsResource resource = null; 1068 boolean internal = false; 1069 1070 try { 1072 resource = getCms().readResource(getParamResource(), CmsResourceFilter.ALL); 1073 internal = ((resource.getFlags() & CmsResource.FLAG_INTERNAL) > 0); 1074 } catch (CmsException e) { 1075 LOG.error(e.getLocalizedMessage()); 1077 } 1078 1079 if ((resource != null) && (resource.isFile())) { 1080 result.append("<form action=\"").append(getDialogUri()).append( 1082 "\" method=\"post\" name=\"internal\" class=\"nomargin\">\n"); 1083 result.append("<table border=\"0\" width=\"100%\">\n"); 1084 result.append("<tr>\n"); 1085 result.append("\t<td class=\"dialogpermissioncell\">").append(key(Messages.GUI_PERMISSION_INTERNAL_0)); 1086 result.append(" <input type=\"checkbox\" name=\""); 1087 result.append(PARAM_INTERNAL); 1088 result.append("\" value=\"true\""); 1089 if (internal) { 1090 result.append(" checked=\"checked\""); 1091 } 1092 if (!getEditable()) { 1093 result.append(" disabled=\"disabled\""); 1094 } 1095 result.append(" ></td>\n"); 1096 if (getEditable()) { 1097 result.append("<td><input type=\"submit\" class=\"dialogbutton\" value=\"").append( 1098 key(Messages.GUI_LABEL_SET_0)).append("\">"); 1099 } 1100 result.append("</td>\n"); 1101 result.append("</tr>\n"); 1102 result.append("</table>\n"); 1103 setParamAction(DIALOG_INTERNALUSE); 1104 setParamType(null); 1105 setParamName(null); 1106 result.append(paramsAsHidden()); 1107 result.append("</form>\n"); 1108 } 1109 return result.toString(); 1110 1111 } 1112 1113 1122 private StringBuffer buildPermissionEntryForm( 1123 CmsAccessControlEntry entry, 1124 boolean editable, 1125 boolean extendedView, 1126 String inheritRes) { 1127 1128 StringBuffer result = new StringBuffer (8); 1129 1130 I_CmsPrincipal principal = getCms().lookupPrincipal(entry.getPrincipal()); 1132 String name = (principal != null) ? principal.getName() : entry.getPrincipal().toString(); 1133 String type = getEntryType(entry.getFlags()); 1134 1135 if (name == null) { 1136 name = ""; 1137 } 1138 1139 setParamType(type); 1141 setParamName(name); 1142 1143 String idValue = type + name + entry.getResource(); 1145 1146 String typeLocalized = getTypesLocalized()[getEntryTypeInt(entry.getFlags())]; 1148 1149 String typeImg = getEntryType(entry.getFlags()).toLowerCase(); 1151 1152 CmsPermissionSet permissions = entry.getPermissions(); 1154 1155 String disabled = ""; 1157 if (!editable) { 1158 disabled = " disabled=\"disabled\""; 1159 } 1160 1161 result.append(dialogRow(HTML_START)); 1163 if (extendedView) { 1164 result.append("<a HREF=\"javascript:toggleDetail('").append(idValue).append("');\">"); 1166 result.append("<img SRC=\"").append(getSkinUri()).append("commons/plus.png\" class=\"noborder\" id=\"ic-").append( 1167 idValue).append("\"></a>"); 1168 } 1169 result.append("<img SRC=\"").append(getSkinUri()).append("commons/"); 1170 result.append(typeImg); 1171 result.append(".png\" class=\"noborder\" width=\"16\" height=\"16\" alt=\""); 1172 result.append(typeLocalized); 1173 result.append("\" title=\""); 1174 result.append(typeLocalized); 1175 result.append("\"> <span class=\"textbold\">"); 1176 result.append(name); 1177 result.append("</span>"); 1178 1179 if (extendedView) { 1180 result.append(" (").append(entry.getPermissions().getPermissionString()).append(entry.getResponsibleString()).append(")"); 1182 result.append(dialogRow(HTML_END)); 1183 if (CmsStringUtil.isNotEmptyOrWhitespaceOnly(inheritRes)) { 1185 result.append("<div class=\"dialogpermissioninherit\">"); 1186 result.append(key(Messages.GUI_PERMISSION_INHERITED_FROM_1, new Object [] {inheritRes})); 1187 result.append("</div>\n"); 1188 } 1189 result.append("<div id =\"").append(idValue).append("\" class=\"hide\">"); 1190 } else { 1191 result.append(dialogRow(HTML_END)); 1192 } 1193 1194 result.append("<table class=\"dialogpermissiondetails\">\n"); 1195 1196 if (editable) { 1198 result.append("<form action=\"").append(getDialogUri()).append( 1199 "\" method=\"post\" class=\"nomargin\" name=\"set").append(idValue).append("\">\n"); 1200 setParamAction(DIALOG_SET); 1202 result.append(paramsAsHidden()); 1203 } else { 1204 result.append("<form class=\"nomargin\">\n"); 1205 } 1206 1207 result.append("<tr>\n"); 1209 result.append("\t<td class=\"dialogpermissioncell\"><span class=\"textbold\" unselectable=\"on\">"); 1210 result.append(key(Messages.GUI_PERMISSION_0)).append("</span></td>\n"); 1211 result.append("\t<td class=\"dialogpermissioncell textcenter\"><span class=\"textbold\" unselectable=\"on\">"); 1212 result.append(key(Messages.GUI_PERMISSION_ALLOWED_0)).append("</span></td>\n"); 1213 result.append("\t<td class=\"dialogpermissioncell textcenter\"><span class=\"textbold\" unselectable=\"on\">"); 1214 result.append(key(Messages.GUI_PERMISSION_DENIED_0)).append("</span></td>\n"); 1215 result.append("</tr>"); 1216 1217 Iterator i = m_permissionKeys.iterator(); 1218 1219 while (i.hasNext()) { 1221 String key = (String )i.next(); 1222 int value = CmsPermissionSet.getPermissionValue(key); 1223 String keyMessage = key(key); 1224 result.append("<tr>\n"); 1225 result.append("\t<td class=\"dialogpermissioncell\">").append(keyMessage).append("</td>\n"); 1226 result.append("\t<td class=\"dialogpermissioncell textcenter\"><input type=\"checkbox\" name=\""); 1227 result.append(value).append(PERMISSION_ALLOW).append("\" value=\"").append(value).append("\"").append( 1228 disabled); 1229 if (isAllowed(permissions, value)) { 1230 result.append(" checked=\"checked\""); 1231 } 1232 result.append("></td>\n"); 1233 result.append("\t<td class=\"dialogpermissioncell textcenter\"><input type=\"checkbox\" name=\""); 1234 result.append(value).append(PERMISSION_DENY).append("\" value=\"").append(value).append("\"").append( 1235 disabled); 1236 if (isDenied(permissions, value)) { 1237 result.append(" checked=\"checked\""); 1238 } 1239 result.append("></td>\n"); 1240 result.append("</tr>\n"); 1241 } 1242 1243 if (editable) { 1245 1246 result.append("<tr>\n"); 1248 result.append("\t<td class=\"dialogpermissioncell\">").append(key(Messages.GUI_LABEL_RESPONSIBLE_0)).append( 1249 "</td>\n"); 1250 result.append("\t<td class=\"dialogpermissioncell textcenter\">"); 1251 result.append("<input type=\"checkbox\" name=\"").append(PARAM_RESPONSIBLE).append( 1252 "\" value=\"true\"").append(disabled); 1253 if (isResponsible(entry.getFlags())) { 1254 result.append(" checked=\"checked\""); 1255 } 1256 result.append("></td>\n"); 1257 result.append("\t<td class=\"dialogpermissioncell\"> </td>\n"); 1258 result.append("</tr>\n"); 1259 1260 result.append("<tr>\n"); 1262 result.append("\t<td class=\"dialogpermissioncell\">").append(key(Messages.GUI_PERMISSION_OVERWRITE_INHERITED_0)).append( 1263 "</td>\n"); 1264 result.append("\t<td class=\"dialogpermissioncell textcenter\">"); 1265 result.append("<input type=\"checkbox\" name=\"").append(PARAM_OVERWRITEINHERITED).append( 1266 "\" value=\"true\"").append(disabled); 1267 if (isOverWritingInherited(entry.getFlags())) { 1268 result.append(" checked=\"checked\""); 1269 } 1270 result.append("></td>\n"); 1271 result.append("\t<td class=\"dialogpermissioncell\"> </td>\n"); 1272 result.append("</tr>\n"); 1273 1274 if (getInheritOption()) { 1276 result.append("<tr>\n"); 1277 result.append("\t<td class=\"dialogpermissioncell\">").append(key(Messages.GUI_PERMISSION_INHERIT_ON_SUBFOLDERS_0)).append( 1278 "</td>\n"); 1279 result.append("\t<td class=\"dialogpermissioncell textcenter\">"); 1280 result.append("<input type=\"checkbox\" name=\"").append(PARAM_INHERIT).append("\" value=\"true\"").append( 1281 disabled); 1282 if (isInheriting(entry.getFlags())) { 1283 result.append(" checked=\"checked\""); 1284 } 1285 result.append("></td>\n"); 1286 result.append("\t<td class=\"dialogpermissioncell\"> </td>\n"); 1287 result.append("</tr>\n"); 1288 } 1289 1290 result.append("<tr>\n"); 1292 result.append("\t<td> </td>\n"); 1293 result.append("\t<td class=\"textcenter\"><input class=\"dialogbutton\" type=\"submit\" value=\"").append( 1294 key(Messages.GUI_LABEL_SET_0)).append("\"></form></td>\n"); 1295 result.append("\t<td class=\"textcenter\">\n"); 1296 result.append("\t\t<form class=\"nomargin\" action=\"").append(getDialogUri()).append( 1298 "\" method=\"post\" name=\"delete").append(idValue).append("\">\n"); 1299 setParamAction(DIALOG_DELETE); 1301 result.append(paramsAsHidden()); 1302 result.append("\t\t<input class=\"dialogbutton\" type=\"submit\" value=\"").append(key(Messages.GUI_LABEL_DELETE_0)).append( 1303 "\">\n"); 1304 result.append("\t\t</form>\n"); 1305 result.append("\t</td>\n"); 1306 result.append("</tr>\n"); 1307 } else { 1308 result.append("</form>\n"); 1310 } 1311 1312 result.append("</table>\n"); 1313 if (extendedView) { 1314 result.append("</div>"); 1316 } 1317 1318 return result; 1319 } 1320 1321 1330 private StringBuffer buildPermissionEntryForm( 1331 CmsUUID id, 1332 CmsPermissionSet curSet, 1333 boolean editable, 1334 boolean extendedView) { 1335 1336 String fileName = getParamResource(); 1337 int flags = 0; 1338 try { 1339 try { 1341 getCms().readGroup(id); 1342 flags = CmsAccessControlEntry.ACCESS_FLAGS_GROUP; 1343 } catch (CmsException e) { 1344 try { 1345 getCms().readUser(id); 1346 flags = CmsAccessControlEntry.ACCESS_FLAGS_USER; 1347 } catch (CmsException exc) { 1348 if (LOG.isInfoEnabled()) { 1350 LOG.info(e.getLocalizedMessage()); 1351 } 1352 } 1353 } 1354 CmsResource res = getCms().readResource(fileName, CmsResourceFilter.ALL); 1355 CmsAccessControlEntry entry = new CmsAccessControlEntry(res.getResourceId(), id, curSet, flags); 1356 return buildPermissionEntryForm(entry, editable, extendedView, null); 1357 } catch (CmsException e) { 1358 if (LOG.isInfoEnabled()) { 1360 LOG.info(e.getLocalizedMessage()); 1361 } 1362 return new StringBuffer (""); 1363 } 1364 } 1365 1366 1372 private StringBuffer buildResourceList(ArrayList entries) { 1373 1374 StringBuffer result = new StringBuffer (256); 1375 Iterator i = entries.iterator(); 1376 boolean hasEntries = i.hasNext(); 1377 1378 if (hasEntries || !getInheritOption()) { 1379 result.append(dialogSubheadline(key(Messages.GUI_PERMISSION_TITLE_0))); 1381 } 1382 1383 result.append(buildInternalForm()); 1385 1386 if (hasEntries) { 1387 result.append(dialogSpacer()); 1389 result.append(dialogWhiteBox(HTML_START)); 1391 1392 while (i.hasNext()) { 1394 CmsAccessControlEntry curEntry = (CmsAccessControlEntry)i.next(); 1395 result.append(buildPermissionEntryForm(curEntry, this.getEditable(), false, null)); 1396 if (i.hasNext()) { 1397 result.append(dialogSeparator()); 1398 } 1399 } 1400 1401 result.append(dialogWhiteBox(HTML_END)); 1403 } 1404 return result; 1405 } 1406 1407 1413 public String buildResponsibleList(boolean show) { 1414 1415 List parentResources = new ArrayList (); 1416 Map responsibles = new HashMap (); 1417 CmsObject cms = getCms(); 1418 String resourceSitePath = cms.getRequestContext().removeSiteRoot(getParamResource()); 1419 try { 1420 parentResources = cms.readPath(getParamResource(), CmsResourceFilter.IGNORE_EXPIRATION); 1422 } catch (CmsException e) { 1423 if (CmsChacc.LOG.isInfoEnabled()) { 1425 CmsChacc.LOG.info(e.getLocalizedMessage()); 1426 } 1427 } 1428 Iterator i = parentResources.iterator(); 1429 while (i.hasNext()) { 1430 CmsResource resource = (CmsResource)i.next(); 1431 try { 1432 String sitePath = resource.getRootPath(); 1433 Iterator entries = cms.getAccessControlEntries(cms.getRequestContext().removeSiteRoot(sitePath), false).iterator(); 1434 while (entries.hasNext()) { 1435 CmsAccessControlEntry ace = (CmsAccessControlEntry)entries.next(); 1436 if (ace.isResponsible()) { 1437 I_CmsPrincipal principal = cms.lookupPrincipal(ace.getPrincipal()); 1438 responsibles.put(principal, sitePath); 1439 } 1440 } 1441 } catch (CmsException e) { 1442 if (LOG.isInfoEnabled()) { 1444 LOG.info(e.getLocalizedMessage()); 1445 } 1446 } 1447 } 1448 1449 if (responsibles.size() == 0) { 1450 1451 return key(Messages.GUI_AVAILABILITY_NO_RESPONSIBLES_0); 1452 } 1453 StringBuffer result = new StringBuffer (512); 1454 result.append(dialogToggleStart(key(Messages.GUI_AVAILABILITY_RESPONSIBLES_0), "responsibles", show)); 1455 1456 result.append(dialogWhiteBoxStart()); 1457 i = responsibles.keySet().iterator(); 1458 while (i.hasNext()) { 1459 I_CmsPrincipal principal = (I_CmsPrincipal)i.next(); 1460 String image = "user.png"; 1461 if (principal instanceof CmsGroup) { 1462 image = "group.png"; 1463 } 1464 result.append("<div class=\"dialogrow\"><img SRC=\""); 1465 result.append(getSkinUri()); 1466 result.append("commons/"); 1467 result.append(image); 1468 result.append("\" class=\"noborder\" width=\"16\" height=\"16\" alt=\"Group\" title=\"Group\"> <span class=\"textbold\">"); 1469 result.append(principal.getName()); 1470 result.append("</span>"); 1471 if ("long".equals(getSettings().getPermissionDetailView())) { 1472 result.append("<div class=\"dialogpermissioninherit\">"); 1473 String resourceName = ((String )responsibles.get(principal)); 1474 if (!resourceSitePath.equals(resourceName)) { 1475 result.append(key(Messages.GUI_PERMISSION_INHERITED_FROM_1, new Object [] {resourceName})); 1476 } 1477 result.append("</div>"); 1478 } 1479 result.append("</div>\n"); 1480 } 1481 result.append(dialogWhiteBoxEnd()); 1482 result.append("</div>\n"); 1483 return result.toString(); 1484 } 1485 1486} 1487 | Popular Tags |