1 25 package org.snipsnap.jsp; 26 27 import org.apache.taglibs.standard.lang.support.ExpressionEvaluatorManager; 28 import org.radeox.util.logging.Logger; 29 import org.snipsnap.app.Application; 30 import org.snipsnap.snip.Snip; 31 import org.snipsnap.snip.SnipSpaceFactory; 32 import org.snipsnap.user.Roles; 33 import org.snipsnap.user.Security; 34 import org.snipsnap.user.User; 35 36 import javax.servlet.jsp.JspException ; 37 import javax.servlet.jsp.JspTagException ; 38 import javax.servlet.jsp.jstl.core.ConditionalTagSupport; 39 import java.util.StringTokenizer ; 40 41 42 public class UserAuth extends ConditionalTagSupport { 43 protected Roles roles; 44 protected Snip snip; 45 46 protected boolean invertCheck = false; 47 48 public void setName(String snip) { 49 try { 50 String snipName = (String ) ExpressionEvaluatorManager.evaluate("snip", snip, String .class, this, pageContext); 51 this.snip = SnipSpaceFactory.getInstance().load(snipName); 52 } catch (JspException e) { 53 Logger.warn("unable to evaluate expression", e); 54 } 55 } 56 57 public void setSnip(String snip) { 58 try { 59 this.snip = (Snip) ExpressionEvaluatorManager.evaluate("snip", snip, Snip.class, this, pageContext); 60 } catch (JspException e) { 61 Logger.warn("unable to evaluate expression", e); 62 } 63 } 64 65 public void setRoles(String roles) { 66 StringTokenizer tok = new StringTokenizer (roles, ":,"); 67 this.roles = new Roles(); 68 while (tok.hasMoreTokens()) { 69 String token = tok.nextToken(); 70 this.roles.add(token); 71 } 72 } 73 74 75 public void setInvert(Boolean value) { 76 invertCheck = value.booleanValue(); 77 } 78 79 protected boolean condition() throws JspTagException { 80 Application app = (Application) pageContext.findAttribute("app"); 81 User user = app.getUser(); 82 if (snip != null) { 83 boolean isTrue = Security.hasRoles(user, snip, roles); 84 return (invertCheck ? !isTrue : isTrue); 85 } else { 86 boolean isTrue = Security.hasRoles(user, roles); 87 return (invertCheck ? !isTrue : isTrue); 88 } 89 } 90 } 91 | Popular Tags |