Added the basic menu structure and the EditProfile and Admin pages.
[photos] / src / main / java / org / wamblee / photos / wicket / BasePage.java
index f6c63d00ccd104552e5e17047c48a40f3f8de390..8e0cc495f904c5610fca34a32dff6195f5ac2347 100644 (file)
  */
 package org.wamblee.photos.wicket;
 
+import java.security.Principal;
 import javax.inject.Inject;
 import javax.servlet.http.HttpServletRequest;
 
 import org.apache.wicket.RedirectToUrlException;
 import org.apache.wicket.markup.html.CSSPackageResource;
+import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.link.Link;
 import org.apache.wicket.markup.html.panel.FeedbackPanel;
 import org.apache.wicket.model.IModel;
+import org.wamblee.security.authentication.UserAdministration;
 import org.wamblee.wicket.behavior.TitleAttributeTooltipBehavior;
 import org.wamblee.wicket.css.ResetCssBehavior;
 import org.wamblee.wicket.page.ExpireBehavior;
@@ -35,6 +38,9 @@ public class BasePage extends WebApplicationBasePage {
     @Inject
     private HttpServletRequest request;
 
+    @Inject
+    private UserAdministration userAdmin;
+
     private boolean isExpired = false;
 
     public BasePage() {
@@ -44,8 +50,14 @@ public class BasePage extends WebApplicationBasePage {
     public BasePage(IModel aModel) {
         super(aModel);
 
-        if (request.getUserPrincipal() == null) {
-            redirectToLoginPage();
+        Principal userPrincipal = request.getUserPrincipal();
+        if (userPrincipal == null) {
+            throw redirectToLoginPage();
+        }
+        String username = userPrincipal.getName();
+        if (isAdminPage() && !isAdministrator(username)) {
+            error("Unauthorized URL accessed");
+            throw redirectToLoginPage();
         }
 
         add(new ResetCssBehavior());
@@ -70,6 +82,20 @@ public class BasePage extends WebApplicationBasePage {
                 throw redirectToLoginPage();
             }
         });
+
+        WebMarkupContainer adminAccess = new WebMarkupContainer("adminAccess");
+        if (!isAdministrator(username)) {
+            adminAccess.setVisible(false);
+        }
+        add(adminAccess);
+    }
+
+    protected boolean isAdminPage() {
+        return false;
+    }
+
+    protected boolean isAdministrator(String aUsername) {
+        return userAdmin.isInGroup(aUsername, "administrators");
     }
 
     private RedirectToUrlException redirectToLoginPage() {