1 9 package org.jboss.portal.core.portlet.permission; 10 11 import org.jboss.portal.common.context.DelegateContext; 12 import org.jboss.portal.common.plugin.Plugin; 13 import org.jboss.portal.core.CoreConstants; 14 import org.jboss.portal.core.model.Role; 15 import org.jboss.portal.core.modules.ModuleConstants; 16 import org.jboss.portal.core.modules.ModuleException; 17 import org.jboss.portal.core.modules.RoleModule; 18 import org.jboss.portal.core.plugins.security.ModelPlugin; 19 import org.jboss.portal.core.security.AuthorizationRealm; 20 import org.jboss.portal.core.security.Item; 21 import org.jboss.portal.core.security.ModelAuthorizationRealm; 22 import org.jboss.portal.core.security.PermissionDescription; 23 import org.jboss.portal.core.security.Scheme; 24 import org.jboss.portal.core.security.SchemeStore; 25 import org.jboss.portal.core.servlet.jsp.PortalJsp; 26 import org.jboss.portal.portlet.PortletContainer; 27 import org.jboss.portal.portlet.metadata.PortletMetaData; 28 import org.jboss.portal.server.Application; 29 import org.jboss.portal.server.Component; 30 import org.jboss.portal.server.PortalServer; 31 import org.jboss.portlet.JBossActionRequest; 32 import org.jboss.portlet.JBossActionResponse; 33 import org.jboss.portlet.JBossPortlet; 34 import org.jboss.portlet.JBossRenderRequest; 35 import org.jboss.portlet.JBossRenderResponse; 36 37 import javax.naming.InitialContext ; 38 import javax.naming.NamingException ; 39 import javax.portlet.PortletException; 40 import javax.portlet.PortletRequestDispatcher; 41 import java.io.IOException ; 42 import java.io.Writer ; 43 import java.util.HashSet ; 44 import java.util.Iterator ; 45 import java.util.ResourceBundle ; 46 import java.util.Set ; 47 48 54 public class PermissionPortlet 55 extends JBossPortlet 56 { 57 58 private static final String OP_PICKPORTLET = "pickPortlet"; 59 private static final String OP_SHOWPERMISSIONS = "showPermissions"; 60 private static final String OP_MODIFYROLES = "modifyRoles"; 61 62 private RoleModule roleModule; 63 64 public void init() throws PortletException 65 { 66 super.init(); 67 try 68 { 69 roleModule = (RoleModule)new InitialContext ().lookup(ModuleConstants.ROLEMODULE_JNDINAME); 70 } 71 catch (NamingException e) 72 { 73 throw new PortletException(e); 74 } 75 76 } 77 78 public void doView(JBossRenderRequest request, JBossRenderResponse response) 79 throws PortletException, IOException 80 { 81 boolean bAuth = request.hasPermission("Admin"); 82 if (bAuth) 83 { 84 85 response.setContentType("text/html"); 86 Writer writer = response.getWriter(); 87 DelegateContext root = new DelegateContext(); 88 PortalServer server = request.getServer(); 89 90 String op = request.getParameters().get(getOperationName(), OP_PICKPORTLET); 91 if (OP_PICKPORTLET.equals(op)) 92 { 93 Iterator applications = server.getApplications().iterator(); 94 while (applications.hasNext()) 95 { 96 Application application = (Application)applications.next(); 97 Iterator components = application.getComponents().iterator(); 98 while (components.hasNext()) 99 { 100 Component component = (Component)components.next(); 101 if (component.getPlugin(CoreConstants.REALM_KEY) != null) 102 { 103 Plugin plugin = (Plugin)component.getPlugin(CoreConstants.REALM_KEY); 104 if (plugin instanceof ModelPlugin) 105 { 106 ModelPlugin model = (ModelPlugin)plugin; 107 DelegateContext portletCtx = root.next("portlet"); 108 portletCtx.put("componentName", component.getName()); 109 portletCtx.put("applicationName", application.getName()); 110 if (component instanceof PortletContainer) 111 { 112 PortletContainer portletComponent = (PortletContainer)component; 113 PortletMetaData portletMetadata = (PortletMetaData)portletComponent.getMetaData(); 114 ResourceBundle bundle = getResourceBundle(request.getLocale()); 115 } 116 } 117 } 118 } 119 } 120 121 request.setAttribute(PortalJsp.CTX_REQUEST, root); 122 PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher("/WEB-INF/jsp/permission/portlets.jsp"); 123 rd.include(request, response); 124 } 125 else if (OP_SHOWPERMISSIONS.equals(op)) 126 { 127 Application application = server.getApplication(request.getParameter("applicationName")); 128 Component component = application.getComponent(request.getParameter("componentName")); 129 String path = request.getParameter("path"); 130 String [] pathArray = (path != null && !("".equals(path))) ? path.split(":") : new String [0]; 131 132 String domain = request.getParameter("domain"); 133 if (domain == null) 134 { 135 domain = ""; } 137 138 root.put("applicationName", request.getParameter("applicationName")); 139 root.put("componentName", request.getParameter("componentName")); 140 root.put("path", path); 141 root.put("domain", domain); 142 143 ModelPlugin plugin = (ModelPlugin)component.getPlugin(CoreConstants.REALM_KEY); 144 145 ModelAuthorizationRealm realm = new ModelAuthorizationRealm(plugin, plugin.getSchemeStore()); 146 147 Item item = plugin.getItem(pathArray); 148 149 if (item != null) 150 { 151 Iterator permissionsNames = item.getPermissionsNames().iterator(); 152 while (permissionsNames.hasNext()) 153 { 154 String permissionName = (String )permissionsNames.next(); 156 DelegateContext permissionCtx = root.next("permission"); 157 PermissionDescription permissionDescription = (PermissionDescription)plugin.getPermissionDescriptions().get(permissionName); 158 159 permissionCtx.put("name", permissionName); 160 permissionCtx.put("description", permissionDescription.getDescription()); 161 162 if (realm.hasPermission(domain, AuthorizationRealm.ANONYMOUS_ROLE, pathArray, permissionName)) 163 { 164 DelegateContext roleCtx = permissionCtx.next("role"); 165 roleCtx.put("displayName", "Anonymous"); 166 } 167 168 if (realm.getScheme(domain).get(pathArray, 169 AuthorizationRealm.ANONYMOUS_ROLE).contains(permissionName)) 170 { 171 DelegateContext defineRoleCtx = permissionCtx 173 .next("definedRole"); 174 defineRoleCtx.put("displayName", "Anonymous"); 175 } 176 177 try 178 { 179 Iterator it = roleModule.findRoles().iterator(); 180 while (it.hasNext()) 181 { 182 Role role = (Role)it.next(); 183 if (realm.hasPermission(domain, role.getName(), 184 pathArray, permissionName)) 185 { 186 DelegateContext roleCtx = permissionCtx.next("role"); 187 roleCtx.put("displayName", role.getDisplayName()); 188 } 189 if (realm.getScheme(domain).get(pathArray, role.getName()).contains(permissionName)) 190 { 191 permissionCtx.next("hasDefinedRole"); 193 DelegateContext defineRoleCtx = permissionCtx 194 .next("definedRole"); 195 defineRoleCtx.put("displayName", role 196 .getDisplayName()); 197 } 198 } 199 } 200 catch (ModuleException e) 201 { 202 e.printStackTrace(); 204 } 205 } 206 207 Iterator items = plugin.getChildren(pathArray); 208 if (items != null) 209 { 210 DelegateContext finerGrainCtx = root.next("finerGrain"); 211 while (items.hasNext()) 212 { 213 Item childItem = (Item)items.next(); 214 DelegateContext itemCtx = finerGrainCtx.next("child"); 215 itemCtx.put("name", childItem.getName()); 216 itemCtx.put("description", childItem.getDescription()); 217 String newPath; 218 if ((path == null) || ("".equals(path))) 219 { 220 newPath = childItem.getName(); 221 } 222 else 223 { 224 newPath = path + ":" + childItem.getName(); 225 } 226 itemCtx.put("path", newPath); 227 } 228 } 229 } 230 request.setAttribute(PortalJsp.CTX_REQUEST, root); 231 PortletRequestDispatcher rd = getPortletContext() 232 .getRequestDispatcher("/WEB-INF/jsp/permission/permissions.jsp"); 233 rd.include(request, response); 234 } 235 else if (OP_MODIFYROLES.equals(op)) 236 { 237 Application application = server.getApplication(request.getParameter("applicationName")); 238 Component component = application.getComponent(request.getParameter("componentName")); 239 240 ModelPlugin plugin = (ModelPlugin)component.getPlugin(CoreConstants.REALM_KEY); 241 ModelAuthorizationRealm realm = new ModelAuthorizationRealm(plugin, plugin.getSchemeStore()); 242 243 String permissionName = request.getParameter("permissionName"); 244 String domain = request.getParameter("domain"); 245 246 root.put("applicationName", request.getParameter("applicationName")); 247 root.put("componentName", request.getParameter("componentName")); 248 root.put("permissionName", permissionName); 249 root.put("domain", domain); 250 251 root.put("permissionDescription", ((PermissionDescription)plugin 252 .getPermissionDescriptions().get(permissionName)) 253 .getDescription()); 254 root.put("portletName", component.getName()); 255 256 String path = request.getParameter("path"); 257 String [] pathArray = (path != null && !("".equals(path))) ? path.split(":") : new String [0]; 258 259 root.put("path", path); 260 261 try 263 { 264 Set rolesSet = roleModule.findRoles(); 265 Iterator it = roleModule.findRoles().iterator(); 266 267 DelegateContext roleCtx = root.next("role"); 269 roleCtx.put("name", "anonymous"); 270 roleCtx.put("displayName", "Anonymous"); 271 if (realm.hasPermission(domain, 272 AuthorizationRealm.ANONYMOUS_ROLE, pathArray, 273 permissionName)) 274 { 275 roleCtx.put("selected", "checked"); 276 if (!realm.getScheme(domain).get(pathArray, 277 AuthorizationRealm.ANONYMOUS_ROLE).contains(permissionName)) 278 { 279 roleCtx.put("disabled", "disabled"); 280 } 281 } 282 283 while (it.hasNext()) 284 { 285 Role role = (Role)it.next(); 286 roleCtx = root.next("role"); 287 roleCtx.put("name", role.getName()); 288 roleCtx.put("displayName", role.getDisplayName()); 289 if (realm.hasPermission(domain, role.getName(), pathArray, 290 permissionName)) 291 { 292 roleCtx.put("selected", "checked"); 293 if (!realm.getScheme(domain).get(pathArray, role.getName()).contains(permissionName)) 294 { 295 roleCtx.put("disabled", "disabled"); 296 } 297 } 298 } 299 } 300 catch (ModuleException e) 301 { 302 e.printStackTrace(); 304 } 305 306 request.setAttribute(PortalJsp.CTX_REQUEST, root); 307 PortletRequestDispatcher rd = getPortletContext() 308 .getRequestDispatcher("/WEB-INF/jsp/permission/modifyRoles.jsp"); 309 rd.include(request, response); 310 } 311 writer.close(); 312 } 313 else 314 { 315 forbidden(request, response); 316 } 317 } 318 319 327 private void forbidden(JBossRenderRequest req, JBossRenderResponse resp) throws PortletException, IOException 328 { 329 resp.setContentType("text/html"); 330 PortletRequestDispatcher prd = getPortletContext().getRequestDispatcher("/WEB-INF/jsp/permission/forbidden.jsp"); 331 prd.include(req, resp); 332 } 333 334 public void modifyRoles(JBossActionRequest request, JBossActionResponse response) 335 { 336 PortalServer server = request.getServer(); 337 338 String [] roles = request.getParameterValues("roles"); 339 Set rolesSet = new HashSet (); 340 if (roles != null) 341 { 342 for (int i = 0; i < roles.length; i++) 343 { 344 rolesSet.add(roles[i]); 345 } 346 } 347 String path = request.getParameter("path"); 348 String [] pathArray = ((path != null) && (path.length() != 0)) ? request.getParameter("path").split(":") : new String [0]; 349 String permissionName = request.getParameter("permissionName"); 350 351 Application application = server.getApplication(request.getParameter("applicationName")); 352 Component component = application.getComponent(request.getParameter("componentName")); 353 ModelPlugin plugin = (ModelPlugin)component.getPlugin(CoreConstants.REALM_KEY); 354 355 String domain = request.getParameter("domain"); 356 357 SchemeStore store = plugin.getSchemeStore(); 359 Scheme scheme = store.getScheme(""); 360 if (scheme == null) 361 { 362 scheme = plugin.getDefaultScheme(); 363 } 364 365 scheme = new Scheme(scheme); 367 368 try 370 { 371 Iterator it = roleModule.findRoles().iterator(); 372 while (it.hasNext()) 373 { 374 Role role = (Role)it.next(); 375 if (rolesSet.contains(role.getName())) 376 { 377 scheme.add(pathArray, role.getName(), permissionName); 378 } 379 else 380 { 381 scheme.remove(pathArray, role.getName(), permissionName); 382 } 383 } 384 } 385 catch (ModuleException e) 386 { 387 e.printStackTrace(); 388 } 389 390 if (rolesSet.contains("anonymous")) 392 { 393 scheme.add(pathArray, AuthorizationRealm.ANONYMOUS_ROLE, permissionName); 394 } 395 else 396 { 397 scheme.remove(pathArray, AuthorizationRealm.ANONYMOUS_ROLE, permissionName); 398 } 399 400 store.saveScheme("", scheme); 402 } 403 } | Popular Tags |