From dd47a09cf24a818b1245a4efc27a61adc6c85b8e Mon Sep 17 00:00:00 2001 From: Janis Streib Date: Sat, 23 Aug 2014 23:41:42 +0200 Subject: [PATCH] UPD: More advanced permission system for menu items to provide adaptive menu visibility --- src/org/cacert/gigi/output/IMenuItem.java | 5 +-- src/org/cacert/gigi/output/Menu.java | 35 +++++++++++++------ src/org/cacert/gigi/output/PageMenuItem.java | 10 ++---- .../cacert/gigi/output/SimpleMenuItem.java | 6 ++++ 4 files changed, 36 insertions(+), 20 deletions(-) diff --git a/src/org/cacert/gigi/output/IMenuItem.java b/src/org/cacert/gigi/output/IMenuItem.java index 8abdc832..eeef0b04 100644 --- a/src/org/cacert/gigi/output/IMenuItem.java +++ b/src/org/cacert/gigi/output/IMenuItem.java @@ -1,10 +1,11 @@ package org.cacert.gigi.output; +import org.cacert.gigi.PermissionCheckable; + /** * Markerinterface for an {@link Outputable} speicially used in a {@link Menu}. * * @author janis */ -public interface IMenuItem extends Outputable { - // Nothing to see here. +public interface IMenuItem extends Outputable, PermissionCheckable { } diff --git a/src/org/cacert/gigi/output/Menu.java b/src/org/cacert/gigi/output/Menu.java index 9ad9ba99..b1fc745a 100644 --- a/src/org/cacert/gigi/output/Menu.java +++ b/src/org/cacert/gigi/output/Menu.java @@ -4,6 +4,7 @@ import java.io.PrintWriter; import java.util.LinkedList; import java.util.Map; +import org.cacert.gigi.User; import org.cacert.gigi.localisation.Language; public class Menu implements IMenuItem { @@ -25,17 +26,26 @@ public class Menu implements IMenuItem { @Override public void output(PrintWriter out, Language l, Map vars) { - out.println("
"); - out.print("

+ "); - out.print(l.getTranslation(menuName)); - out.print("

"); - out.print("
    "); - for (Outputable mi : content) { - mi.output(out, l, vars); + boolean visible = false; + User u = (User) vars.get(USER_VALUE); + for (IMenuItem mi : content) { + if (mi.isPermitted(u)) { + if ( !visible) { + visible = true; + out.println("
    "); + out.print("

    + "); + out.print(l.getTranslation(menuName)); + out.print("

    "); + out.print("
      "); + } + mi.output(out, l, vars); + } + } + if (visible) { + out.println("
    "); } - out.println("
"); } public void addItem(IMenuItem item) { @@ -59,4 +69,9 @@ public class Menu implements IMenuItem { public String getMenuName() { return menuName; } + + @Override + public boolean isPermitted(User u) { + return true; + } } diff --git a/src/org/cacert/gigi/output/PageMenuItem.java b/src/org/cacert/gigi/output/PageMenuItem.java index 846563fd..196540de 100644 --- a/src/org/cacert/gigi/output/PageMenuItem.java +++ b/src/org/cacert/gigi/output/PageMenuItem.java @@ -1,11 +1,7 @@ package org.cacert.gigi.output; -import java.io.PrintWriter; -import java.util.Map; - import org.cacert.gigi.Gigi; import org.cacert.gigi.User; -import org.cacert.gigi.localisation.Language; import org.cacert.gigi.pages.Page; import org.cacert.gigi.util.ServerConstants; @@ -20,9 +16,7 @@ public class PageMenuItem extends SimpleMenuItem { } @Override - public void output(PrintWriter out, Language l, Map vars) { - if (p.isPermitted((User) vars.get(Menu.USER_VALUE))) { - super.output(out, l, vars); - } + public boolean isPermitted(User u) { + return p.isPermitted(u); } } diff --git a/src/org/cacert/gigi/output/SimpleMenuItem.java b/src/org/cacert/gigi/output/SimpleMenuItem.java index 95b78c86..4ac97c05 100644 --- a/src/org/cacert/gigi/output/SimpleMenuItem.java +++ b/src/org/cacert/gigi/output/SimpleMenuItem.java @@ -3,6 +3,7 @@ package org.cacert.gigi.output; import java.io.PrintWriter; import java.util.Map; +import org.cacert.gigi.User; import org.cacert.gigi.localisation.Language; public class SimpleMenuItem implements IMenuItem { @@ -25,4 +26,9 @@ public class SimpleMenuItem implements IMenuItem { out.print(""); } + @Override + public boolean isPermitted(User u) { + return true; + } + } -- 2.39.2