1 31 32 package org.opencms.workplace.explorer; 33 34 import org.opencms.file.CmsObject; 35 import org.opencms.file.CmsUser; 36 import org.opencms.main.CmsException; 37 import org.opencms.main.CmsLog; 38 import org.opencms.main.OpenCms; 39 import org.opencms.security.CmsAccessControlEntry; 40 import org.opencms.security.CmsAccessControlList; 41 import org.opencms.security.CmsPermissionSet; 42 import org.opencms.security.I_CmsPrincipal; 43 import org.opencms.util.CmsUUID; 44 45 import java.util.HashMap ; 46 import java.util.Iterator ; 47 import java.util.List ; 48 import java.util.Map ; 49 50 import org.apache.commons.logging.Log; 51 52 61 public class CmsExplorerTypeAccess { 62 63 64 public static final String PRINCIPAL_DEFAULT = "DEFAULT"; 65 66 67 private static final Log LOG = CmsLog.getLog(CmsExplorerTypeAccess.class); 68 69 private Map m_accessControl; 70 private CmsAccessControlList m_accessControlList; 71 72 75 public CmsExplorerTypeAccess() { 76 77 m_accessControl = new HashMap (); 78 m_accessControlList = new CmsAccessControlList(); 79 } 80 81 90 public void addAccessEntry(String key, String value) { 91 92 m_accessControl.put(key, value); 93 if (LOG.isDebugEnabled()) { 94 LOG.debug(Messages.get().getBundle().key(Messages.LOG_ADD_ACCESS_ENTRY_2, key, value)); 95 } 96 } 97 98 103 public void createAccessControlList() throws CmsException { 104 105 if (OpenCms.getRunLevel() < OpenCms.RUNLEVEL_2_INITIALIZING) { 106 return; 108 } 109 110 m_accessControlList = new CmsAccessControlList(); 111 Iterator i = m_accessControl.keySet().iterator(); 112 while (i.hasNext()) { 113 String key = (String )i.next(); 114 if (!PRINCIPAL_DEFAULT.equals(key)) { 115 String value = (String )m_accessControl.get(key); 116 CmsUUID principalId = new CmsUUID(); 117 String principal = key.substring(key.indexOf('.') + 1, key.length()); 119 120 CmsObject cms = OpenCms.initCmsObject(OpenCms.getDefaultUsers().getUserGuest()); 122 123 if (key.startsWith(I_CmsPrincipal.PRINCIPAL_GROUP)) { 124 principal = OpenCms.getImportExportManager().translateGroup(principal); 126 principalId = cms.readGroup(principal).getId(); 127 } else { 128 principal = OpenCms.getImportExportManager().translateUser(principal); 130 principalId = cms.readUser(principal).getId(); 131 } 132 CmsAccessControlEntry entry = new CmsAccessControlEntry(null, principalId, value); 134 m_accessControlList.add(entry); 135 } 136 } 137 } 138 139 144 public Map getAccessEntries() { 145 146 return m_accessControl; 147 } 148 149 157 public CmsPermissionSet getPermissions(CmsObject cms) { 158 159 CmsAccessControlList acl = (CmsAccessControlList)m_accessControlList.clone(); 160 161 CmsUser user = cms.getRequestContext().currentUser(); 162 List groups = null; 163 try { 164 groups = cms.getGroupsOfUser(user.getName()); 165 } catch (CmsException e) { 166 LOG.error(Messages.get().getBundle().key(Messages.LOG_READ_GROUPS_OF_USER_FAILED_1, user.getName())); 168 } 169 String defaultPermissions = (String )m_accessControl.get(PRINCIPAL_DEFAULT); 170 if ((defaultPermissions != null) && !user.isGuestUser()) { 172 boolean found = false; 173 if (acl.getPermissions(user) != null) { 174 found = true; 176 } 177 if (!found && (groups != null)) { 178 Iterator i = groups.iterator(); 180 while (i.hasNext()) { 181 I_CmsPrincipal principal = (I_CmsPrincipal)i.next(); 182 if (acl.getPermissions(principal) != null) { 183 found = true; 185 break; 186 } 187 } 188 } 189 if (!found) { 190 CmsAccessControlEntry entry = new CmsAccessControlEntry(null, user.getId(), defaultPermissions); 192 acl.add(entry); 193 } 194 } 195 196 return acl.getPermissions(user, groups); 198 } 199 200 204 public boolean isEmpty() { 205 206 return m_accessControl.isEmpty(); 207 } 208 } | Popular Tags |