Add minimum user level required to view pages.
authorDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Wed, 25 Jul 2012 20:18:51 +0000 (22:18 +0200)
committerDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Thu, 26 Jul 2012 05:28:49 +0000 (07:28 +0200)
src/main/java/net/pterodactylus/demoscenemusic/page/BasePage.java

index c24e6af..65505fa 100644 (file)
@@ -18,6 +18,7 @@
 package net.pterodactylus.demoscenemusic.page;
 
 import net.pterodactylus.demoscenemusic.core.Core;
+import net.pterodactylus.demoscenemusic.data.User;
 import net.pterodactylus.util.template.Template;
 import net.pterodactylus.util.template.TemplateContext;
 import net.pterodactylus.util.template.TemplateContextFactory;
@@ -57,7 +58,23 @@ public class BasePage extends TemplatePage<ServletRequest> {
        @Override
        protected void processTemplate(TemplateContext templateContext, ServletRequest request) throws RedirectException {
                super.processTemplate(templateContext, request);
-               templateContext.set("currentUser", request.getServletRequest().getSession().getAttribute("currentUser"));
+               User currentUser = (User) request.getServletRequest().getSession().getAttribute("currentUser");
+               templateContext.set("currentUser", currentUser);
+               int requiredUserLevel = getRequiredUserLevel();
+               if (((currentUser == null) && (requiredUserLevel > 0)) || ((currentUser != null) && (requiredUserLevel > currentUser.getLevel()))) {
+                       throw new RedirectException("login");
+               }
+       }
+
+       /**
+        * Returns the {@link User#getLevel() user level} that is at least required
+        * to access the given page. If the returned level is {@code 0} (or
+        * smaller), users don’t have to be logged in.
+        *
+        * @return The lowest user level required to view this page
+        */
+       protected int getRequiredUserLevel() {
+               return 0;
        }
 
 }