1 22 package org.jboss.test.jacc.test.portal; 23 24 import java.security.Permission ; 25 import java.security.PermissionCollection ; 26 import java.security.Principal ; 27 import java.security.acl.Group ; 28 import java.util.ArrayList ; 29 import java.util.Collections ; 30 import java.util.Enumeration ; 31 import java.util.Iterator ; 32 import java.util.List ; 33 import java.util.Set ; 34 35 import javax.security.auth.Subject ; 36 import javax.security.jacc.PolicyContext ; 37 38 import org.jboss.logging.Logger; 39 40 42 49 public class LazyPermissionCollection extends PermissionCollection 50 { 51 private static Logger log = Logger.getLogger(LazyPermissionCollection.class); 52 53 private List permissionTable = new ArrayList (); 54 55 public void add(Permission perm) 56 { 57 log.debug("Inside add with perm=" + perm); 58 permissionTable.add(perm); 59 } 60 61 62 public boolean implies(Permission perm) 63 { 64 log.debug("Inside implies with perm=" + perm); 65 66 if(perm instanceof PortalPermission == false) 67 return false; 68 69 try 70 { 71 loadPermissionsBasedOnRole(); 72 }catch(Exception e) 73 { 74 log.error(e); 75 return false; 76 } 77 78 int len = permissionTable.size(); 79 for(int i = 0; i < len ; i++) 80 { 81 Permission p = (Permission )permissionTable.get(i); 82 if(p.implies(perm)) 83 return true; 84 } 85 86 return false; 87 } 88 89 90 public Enumeration elements() 91 { 92 return Collections.enumeration(permissionTable); 93 } 94 95 96 private String getRole() throws Exception 97 { 98 Subject subject = (Subject ) PolicyContext.getContext("javax.security.auth.Subject.container"); 99 Set principals = subject.getPrincipals(); 100 Iterator iter = principals != null ? principals.iterator() : null; 101 while(iter != null && iter.hasNext()) 102 { 103 Principal p = (Principal )iter.next(); 104 if(p instanceof Group ) 105 { 106 Group gp = (Group )p; 107 if("Roles".equals(gp.getName()) == false) 108 continue; 109 Enumeration en = gp.members(); 110 while(en.hasMoreElements()) 111 { 112 Principal role = (Principal )en.nextElement(); 113 return role.getName(); 114 } 115 } 116 } 117 return null; 118 } 119 120 private void loadPermissionsBasedOnRole() throws Exception 121 { 122 String role = this.getRole(); 123 if(role == null) 124 throw new IllegalStateException ("role is null"); 125 this.permissionTable.clear(); 126 if("employee".equalsIgnoreCase(role)) 127 { 128 permissionTable.add(new PortalObjectPermission("/default", "view")); 130 } 131 else 132 if("janitor".equalsIgnoreCase(role)) 133 { 134 permissionTable.add(new PortalObjectPermission("/default/default/a", "view")); 136 } 137 else 138 if("admin".equals(role)) 139 { 140 permissionTable.add(new PortalObjectPermission("/", "view")); 142 } 143 } 144 } 145 | Popular Tags |