1 25 26 package org.snipsnap.interceptor.custom; 27 28 29 import org.codehaus.nanning.AspectInstance; 30 import org.codehaus.nanning.Invocation; 31 import org.codehaus.nanning.MethodInterceptor; 32 import org.codehaus.nanning.config.Aspect; 33 import org.codehaus.nanning.config.P; 34 import org.codehaus.nanning.config.Pointcut; 35 import org.radeox.util.logging.Logger; 36 import org.snipsnap.app.Application; 37 import org.snipsnap.snip.SnipSpace; 38 import org.snipsnap.user.Roles; 39 import org.snipsnap.user.Security; 40 import org.snipsnap.user.User; 41 42 import java.security.GeneralSecurityException ; 43 44 public class SnipSpaceACLAspect implements Aspect { 45 Pointcut removePc = P.methodName("remove.*"); 46 private Roles roles; 47 48 public SnipSpaceACLAspect() { 49 roles = new Roles(); 50 roles.add("Admin"); 51 } 52 53 public void introduce(AspectInstance instance) { 54 } 55 56 public void advise(AspectInstance instance) { 57 Class klass = instance.getClassIdentifier(); 58 if (klass != null && klass.equals(SnipSpace.class)) { 60 removePc.advise(instance, new MethodInterceptor() { 61 public Object invoke(Invocation invocation) throws Throwable { 62 User user = Application.get().getUser(); 63 if (!Security.hasRoles(user, null, roles)) { 64 Logger.debug("SECURITY EXCEPTION"); 65 throw new GeneralSecurityException ("Not allowed to remove."); 66 } 67 68 return invocation.invokeNext(); 69 } 70 }); 71 } 72 } 73 } 74 | Popular Tags |