KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jboss > portal > core > portlet > permission > PermissionPortlet


1 /*****************************************
2  * *
3  * JBoss Portal: The OpenSource Portal *
4  * *
5  * Distributable under LGPL license. *
6  * See terms of license at gnu.org. *
7  * *
8  *****************************************/

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 JavaDoc;
38 import javax.naming.NamingException JavaDoc;
39 import javax.portlet.PortletException;
40 import javax.portlet.PortletRequestDispatcher;
41 import java.io.IOException JavaDoc;
42 import java.io.Writer JavaDoc;
43 import java.util.HashSet JavaDoc;
44 import java.util.Iterator JavaDoc;
45 import java.util.ResourceBundle JavaDoc;
46 import java.util.Set JavaDoc;
47
48 /**
49  * This portlet aims at managing permission
50  *
51  * @author <a HREF="mailto:theute@jboss.org">Thomas Heute </a>
52  * @version $Revision: 1.9 $
53  */

54 public class PermissionPortlet
55    extends JBossPortlet
56 {
57
58    private static final String JavaDoc OP_PICKPORTLET = "pickPortlet";
59    private static final String JavaDoc OP_SHOWPERMISSIONS = "showPermissions";
60    private static final String JavaDoc 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 JavaDoc().lookup(ModuleConstants.ROLEMODULE_JNDINAME);
70       }
71       catch (NamingException JavaDoc e)
72       {
73          throw new PortletException(e);
74       }
75
76    }
77
78    public void doView(JBossRenderRequest request, JBossRenderResponse response)
79       throws PortletException, IOException JavaDoc
80    {
81       boolean bAuth = request.hasPermission("Admin");
82       if (bAuth)
83       {
84
85          response.setContentType("text/html");
86          Writer JavaDoc writer = response.getWriter();
87          DelegateContext root = new DelegateContext();
88          PortalServer server = request.getServer();
89
90          String JavaDoc op = request.getParameters().get(getOperationName(), OP_PICKPORTLET);
91          if (OP_PICKPORTLET.equals(op))
92          {
93             Iterator JavaDoc applications = server.getApplications().iterator();
94             while (applications.hasNext())
95             {
96                Application application = (Application)applications.next();
97                Iterator JavaDoc 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 JavaDoc 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 JavaDoc path = request.getParameter("path");
130             String JavaDoc[] pathArray = (path != null && !("".equals(path))) ? path.split(":") : new String JavaDoc[0];
131
132             String JavaDoc domain = request.getParameter("domain");
133             if (domain == null)
134             {
135                domain = ""; // The default domain
136
}
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 JavaDoc permissionsNames = item.getPermissionsNames().iterator();
152                while (permissionsNames.hasNext())
153                {
154                   // Permissions
155
String JavaDoc permissionName = (String JavaDoc)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                      //Defined roles
172
DelegateContext defineRoleCtx = permissionCtx
173                         .next("definedRole");
174                      defineRoleCtx.put("displayName", "Anonymous");
175                   }
176
177                   try
178                   {
179                      Iterator JavaDoc 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                            //Defined roles
192
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                      // TODO Auto-generated catch block
203
e.printStackTrace();
204                   }
205                }
206
207                Iterator JavaDoc 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 JavaDoc 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 JavaDoc permissionName = request.getParameter("permissionName");
244             String JavaDoc 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 JavaDoc path = request.getParameter("path");
257             String JavaDoc[] pathArray = (path != null && !("".equals(path))) ? path.split(":") : new String JavaDoc[0];
258
259             root.put("path", path);
260
261             //Roles
262
try
263             {
264                Set JavaDoc rolesSet = roleModule.findRoles();
265                Iterator JavaDoc it = roleModule.findRoles().iterator();
266
267                // Anonymous
268
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                // TODO Auto-generated catch block
303
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    /**
320     * Handles permissions errors on doView.
321     *
322     * @param req
323     * @param resp
324     * @throws javax.portlet.PortletException
325     * @throws IOException
326     */

327    private void forbidden(JBossRenderRequest req, JBossRenderResponse resp) throws PortletException, IOException JavaDoc
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 JavaDoc[] roles = request.getParameterValues("roles");
339       Set JavaDoc rolesSet = new HashSet JavaDoc();
340       if (roles != null)
341       {
342          for (int i = 0; i < roles.length; i++)
343          {
344             rolesSet.add(roles[i]);
345          }
346       }
347       String JavaDoc path = request.getParameter("path");
348       String JavaDoc[] pathArray = ((path != null) && (path.length() != 0)) ? request.getParameter("path").split(":") : new String JavaDoc[0];
349       String JavaDoc 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 JavaDoc domain = request.getParameter("domain");
356
357       // Get scheme
358
SchemeStore store = plugin.getSchemeStore();
359       Scheme scheme = store.getScheme("");
360       if (scheme == null)
361       {
362          scheme = plugin.getDefaultScheme();
363       }
364
365       // Make a copy
366
scheme = new Scheme(scheme);
367
368       //
369
try
370       {
371          Iterator JavaDoc 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       //
391
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       // Save it
401
store.saveScheme("", scheme);
402    }
403 }
Popular Tags