You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by pa...@apache.org on 2002/06/19 04:44:28 UTC
cvs commit: jakarta-jetspeed/src/java/org/apache/jetspeed/services JetspeedPortalAccessController.java
paulsp 2002/06/18 19:44:28
Modified: src/java/org/apache/jetspeed/services/security/nosecurity
Tag: security_14 NoSecurityAccessController.java
src/java/org/apache/jetspeed/services/security/turbine Tag:
security_14 TurbineAccessController.java
src/java/org/apache/jetspeed/services/security/registry Tag:
security_14 RegistryAccessController.java
TestAccessController.java
src/java/org/apache/jetspeed/services/security Tag:
security_14 PortalAccessController.java
src/java/org/apache/jetspeed/services Tag: security_14
JetspeedPortalAccessController.java
Log:
o Remove checkPermission( JetspeedUser, ResourceType, Resource, Action)
from the interface and current implementations
o Complete RegistryAccessController implementation and it's associated
test.
Revision Changes Path
No revision
No revision
1.1.2.3 +1 -18 jakarta-jetspeed/src/java/org/apache/jetspeed/services/security/nosecurity/Attic/NoSecurityAccessController.java
Index: NoSecurityAccessController.java
===================================================================
RCS file: /home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/services/security/nosecurity/Attic/NoSecurityAccessController.java,v
retrieving revision 1.1.2.2
retrieving revision 1.1.2.3
diff -u -r1.1.2.2 -r1.1.2.3
--- NoSecurityAccessController.java 17 Jun 2002 21:27:04 -0000 1.1.2.2
+++ NoSecurityAccessController.java 19 Jun 2002 02:44:28 -0000 1.1.2.3
@@ -86,23 +86,6 @@
/**
* Given a <code>JetspeedUser</code>, authorize that user to perform the secured action on
- * the given resource of the specified resource type. If the user does not have
- * sufficient privilege to perform the action on the resource, the check returns false,
- * otherwise when sufficient privilege is present, checkPermission returns true.
- *
- * @param user the user to be checked.
- * @param resourceType an enumeration of the resource type.
- * @param resource the name of the resource.
- * @param action the secured action to be performed on the resource by the user.
- * @return boolean true if the user has sufficient privilege.
- */
- final public boolean checkPermission(JetspeedUser user, int resourceType, String resource, String action)
- {
- return true;
- }
-
- /**
- * Given a <code>JetspeedUser</code>, authorize that user to perform the secured action on
* the given <code>Portlet</code> resource. If the user does not have
* sufficient privilege to perform the action on the resource, the check returns false,
* otherwise when sufficient privilege is present, checkPermission returns true.
No revision
No revision
1.1.2.4 +1 -18 jakarta-jetspeed/src/java/org/apache/jetspeed/services/security/turbine/Attic/TurbineAccessController.java
Index: TurbineAccessController.java
===================================================================
RCS file: /home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/services/security/turbine/Attic/TurbineAccessController.java,v
retrieving revision 1.1.2.3
retrieving revision 1.1.2.4
diff -u -r1.1.2.3 -r1.1.2.4
--- TurbineAccessController.java 1 Jun 2002 20:29:05 -0000 1.1.2.3
+++ TurbineAccessController.java 19 Jun 2002 02:44:28 -0000 1.1.2.4
@@ -91,23 +91,6 @@
/**
* Given a <code>JetspeedUser</code>, authorize that user to perform the secured action on
- * the given resource of the specified resource type. If the user does not have
- * sufficient privilege to perform the action on the resource, the check returns false,
- * otherwise when sufficient privilege is present, checkPermission returns true.
- *
- * @param user the user to be checked.
- * @param resourceType an enumeration of the resource type.
- * @param resource the name of the resource.
- * @param action the secured action to be performed on the resource by the user.
- * @return boolean true if the user has sufficient privilege.
- */
- public boolean checkPermission(JetspeedUser user, int resourceType, String resource, String action)
- {
- return false;
- }
-
- /**
- * Given a <code>JetspeedUser</code>, authorize that user to perform the secured action on
* the given <code>Portlet</code> resource. If the user does not have
* sufficient privilege to perform the action on the resource, the check returns false,
* otherwise when sufficient privilege is present, checkPermission returns true.
No revision
No revision
1.1.2.4 +24 -82 jakarta-jetspeed/src/java/org/apache/jetspeed/services/security/registry/Attic/RegistryAccessController.java
Index: RegistryAccessController.java
===================================================================
RCS file: /home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/services/security/registry/Attic/RegistryAccessController.java,v
retrieving revision 1.1.2.3
retrieving revision 1.1.2.4
diff -u -r1.1.2.3 -r1.1.2.4
--- RegistryAccessController.java 18 Jun 2002 06:02:35 -0000 1.1.2.3
+++ RegistryAccessController.java 19 Jun 2002 02:44:28 -0000 1.1.2.4
@@ -61,17 +61,13 @@
// Jetspeed import
import org.apache.jetspeed.om.SecurityReference;
import org.apache.jetspeed.om.profile.Entry;
-//import org.apache.jetspeed.om.profile.Security;
import org.apache.jetspeed.om.registry.RegistryEntry;
-import org.apache.jetspeed.om.registry.Security;
import org.apache.jetspeed.om.registry.SecurityEntry;
import org.apache.jetspeed.om.security.JetspeedUser;
import org.apache.jetspeed.om.security.Role;
import org.apache.jetspeed.portal.Portlet;
-import org.apache.jetspeed.portal.PortletController;
import org.apache.jetspeed.portal.PortletSet;
import org.apache.jetspeed.services.resources.JetspeedResources;
-import org.apache.jetspeed.services.JetspeedSecurity;
import org.apache.jetspeed.services.Registry;
import org.apache.jetspeed.services.security.JetspeedRoleManagement;
import org.apache.jetspeed.services.security.PortalAccessController;
@@ -81,7 +77,6 @@
import org.apache.turbine.services.TurbineBaseService;
import org.apache.turbine.services.InitializationException;
import org.apache.turbine.util.Log;
-//import org.apache.turbine.util.security.AccessControlList;
/**
* TurbineAccessController
@@ -96,24 +91,6 @@
/**
* Given a <code>JetspeedUser</code>, authorize that user to perform the secured action on
- * the given resource of the specified resource type. If the user does not have
- * sufficient privilege to perform the action on the resource, the check returns false,
- * otherwise when sufficient privilege is present, checkPermission returns true.
- *
- * @param user the user to be checked.
- * @param resourceType an enumeration of the resource type.
- * @param resource the name of the resource.
- * @param action the secured action to be performed on the resource by the user.
- * @return boolean true if the user has sufficient privilege.
- */
- public boolean checkPermission(JetspeedUser user, int resourceType, String resource, String action)
- {
- System.out.println("In checkPermissions( user, resourceType, resource, action)");
- return false;
- }
-
- /**
- * Given a <code>JetspeedUser</code>, authorize that user to perform the secured action on
* the given <code>Portlet</code> resource. If the user does not have
* sufficient privilege to perform the action on the resource, the check returns false,
* otherwise when sufficient privilege is present, checkPermission returns true.
@@ -141,11 +118,9 @@
*/
public boolean checkPermission(JetspeedUser user, Entry entry, String action)
{
- System.out.println("In checkPermissions( user, Entry, action)");
SecurityReference securityRef = entry.getSecurityRef();
if (securityRef == null)
{
- System.out.println("In checkPermissions( user, Entry, action), entry has no securirtRef");
return checkPermission( user, Registry.getEntry( Registry.PORTLET, entry.getParent()), action);
}
return checkPermission( user, securityRef, action);
@@ -165,7 +140,6 @@
*/
public boolean checkPermission(JetspeedUser user, PortalResource resource, String action)
{
- System.out.println("In checkPermissions( user, resource, action)");
switch (resource.getResourceType())
{
case PortalResource.TYPE_ENTRY:
@@ -175,62 +149,56 @@
case PortalResource.TYPE_REGISTRY_PARAMETER:
return checkPermission(user, resource.getRegistryParameter(), action);
}
- System.out.println("User = " + user.getUserName() + "ResourceType = " + resource.getResourceType());
return false;
}
/**
- * Checks if the user has access to a given portlet for the given action
+ * Checks if the user has access to a given registry entry for the given action
*
* @param user the requesting user.
* @param regEntry the registry entry from the registry.
* @param action the jetspeed-action (view, edit, customize, delete...) for which permission is being checked.
- * @exception Sends a RegistryException if the manager can't add
- * the provided entry
*/
private boolean checkPermission(JetspeedUser user, RegistryEntry regEntry, String action)
{
- System.out.println("In checkPermissions( user, regEntry, action)");
SecurityReference securityRef = regEntry.getSecurityRef();
if (securityRef == null)
- return true;
+ return true; // No security defined on Registry entry
return checkPermission( user, securityRef, action);
}
-
/**
- * given the rundata, checks if the currently logged on user has access for the given action
+ * Checks if the user has access for the given action using a security refreence
*
- * @param rundata the request rundata.
- * @param permission the jetspeed-action (view, edit, customize, delete...) for which permission is being checked.
- * @param entry the registry entry from the registry.
- * @exception Sends a RegistryException if the manager can't add
- * the provided entry
+ * @param user the requesting user.
+ * @param securityRef the security reference to check
+ * @param action the jetspeed-action (view, edit, customize, delete...) for which permission is being checked.
*/
- private boolean checkDefaultPermission(JetspeedUser user, String action)
+ private boolean checkPermission(JetspeedUser user, SecurityReference securityRef, String action)
{
- System.out.println("In checkPermissions( user, action)");
- String defaultPermissions[] = null;
+ SecurityEntry securityEntry = (SecurityEntry) Registry.getEntry( Registry.SECURITY, securityRef.getParent());
+ if (securityEntry == null)
+ {
+ Log.warn("Security id " + securityRef.getParent() + "does not exist. This was requested by the user " + user.getUserName());
+ return false;
+ }
+ if (securityEntry.allowsUser(user.getUserName(), action))
+ return true;
+
try
{
- if ( (user == null) || !user.hasLoggedIn() )
- {
- defaultPermissions = JetspeedResources.getStringArray(CONFIG_DEFAULT_PERMISSION_ANONYMOUS);
- } else
+ for( Iterator roles = JetspeedRoleManagement.getRoles(user.getUserName()); roles.hasNext();)
{
- defaultPermissions = JetspeedResources.getStringArray(CONFIG_DEFAULT_PERMISSION_LOGGEDIN);
+ Role role = (Role) roles.next();
+ if (securityEntry.allowsRole((String) role.getName(), action))
+ return true;
}
- } catch (Exception e)
- {
- e.printStackTrace();
}
- for (int i = 0; i < defaultPermissions.length; i++)
+ catch (Exception e)
{
- if (defaultPermissions[i].equals("*"))
- return true;
- if (defaultPermissions[i].equals(action))
- return true;
+ Log.error(e);
+ return false;
}
return false;
}
@@ -254,31 +222,5 @@
super.init(conf);
setInit(true);
- }
-
- private boolean checkPermission(JetspeedUser user, SecurityReference securityRef, String action)
- {
- System.out.println("Testing user " + user.getUserName());
- SecurityEntry securityEntry = (SecurityEntry) Registry.getEntry( Registry.SECURITY, securityRef.getParent());
-
- if (securityEntry.allowsUser(user.getUserName(), action))
- return true;
-
- try
- {
- for( Iterator roles = JetspeedRoleManagement.getRoles(user.getUserName()); roles.hasNext();)
- {
- Role role = (Role) roles.next();
- System.out.println("Role name = " + role.getName());
- if (securityEntry.allowsRole((String) role.getName(), action))
- return true;
- }
- }
- catch (Exception e)
- {
- Log.error(e);
- return false;
- }
- return false;
}
}
1.1.2.4 +3 -72 jakarta-jetspeed/src/java/org/apache/jetspeed/services/security/registry/Attic/TestAccessController.java
Index: TestAccessController.java
===================================================================
RCS file: /home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/services/security/registry/Attic/TestAccessController.java,v
retrieving revision 1.1.2.3
retrieving revision 1.1.2.4
diff -u -r1.1.2.3 -r1.1.2.4
--- TestAccessController.java 18 Jun 2002 06:02:35 -0000 1.1.2.3
+++ TestAccessController.java 19 Jun 2002 02:44:28 -0000 1.1.2.4
@@ -55,45 +55,23 @@
package org.apache.jetspeed.services.security.registry;
// Java imports
-import java.io.File;
import java.util.Vector;
// Jetspeed imports
-//import org.apache.jetspeed.om.profile.BaseProfileLocator;
-//import org.apache.jetspeed.om.profile.Control;
-//import org.apache.jetspeed.om.profile.Controller;
import org.apache.jetspeed.om.profile.Entry;
-//import org.apache.jetspeed.om.profile.Profile;
-//import org.apache.jetspeed.om.profile.ProfileLocator;
-//import org.apache.jetspeed.om.profile.Portlets;
-//import org.apache.jetspeed.om.profile.Security;
-//import org.apache.jetspeed.om.profile.PSMLDocument;
-//import org.apache.jetspeed.om.profile.psml.PsmlController;
import org.apache.jetspeed.om.profile.psml.PsmlEntry;
-//import org.apache.jetspeed.om.profile.psml.PsmlPortlets;
-//import org.apache.jetspeed.om.profile.psml.PsmlRole;
-//import org.apache.jetspeed.om.profile.psml.PsmlSecurity;
-//import org.apache.jetspeed.om.profile.psml.PsmlSkin;
import org.apache.jetspeed.om.BaseSecurityReference;
import org.apache.jetspeed.om.SecurityReference;
import org.apache.jetspeed.om.security.JetspeedUser;
-import org.apache.jetspeed.om.registry.base.BaseSecurity;
import org.apache.jetspeed.om.registry.base.BaseSecurityAccess;
import org.apache.jetspeed.om.registry.base.BaseSecurityAllow;
import org.apache.jetspeed.om.registry.base.BaseSecurityEntry;
import org.apache.jetspeed.om.registry.base.BasePortletEntry;
-import org.apache.jetspeed.om.registry.base.BaseParameter;
-import org.apache.jetspeed.om.registry.Parameter;
-import org.apache.jetspeed.om.registry.PortletEntry;
import org.apache.jetspeed.om.registry.RegistryEntry;
-import org.apache.jetspeed.om.registry.Security;
import org.apache.jetspeed.om.registry.SecurityEntry;
import org.apache.jetspeed.services.JetspeedSecurity;
import org.apache.jetspeed.services.JetspeedPortalAccessController;
-//import org.apache.jetspeed.services.Profiler;
-//import org.apache.jetspeed.services.registry.CastorRegistryService;
-//import org.apache.jetspeed.services.registry.RegistryService;
import org.apache.jetspeed.services.Registry;
import org.apache.jetspeed.services.resources.JetspeedResources;
import org.apache.jetspeed.services.security.PortalResource;
@@ -120,15 +98,12 @@
{
private static String ADMIN_PORTLET = "GlobalAdminPortlet"; // Portlet accessable by Admin user, role = admin
- //private static org.apache.jetspeed.om.profile.Security adminSecurity = new PsmlSecurity().setRole( "admin_security");
private static SecurityReference adminSecurityRef = new BaseSecurityReference();
private static String ALL_PORTLET = "HelloVelocity"; // Portlet accessable by Anonymous user
- //private static org.apache.jetspeed.om.profile.Security defaultSecurityRef = new PsmlSecurity( "default_security");
private static SecurityReference defaultSecurityRef = new BaseSecurityReference();
private static String TEST_GROUP = "Jetspeed";
private static String TEST_SECURITY_PAGE = "SecurityTest";
private static String USER_PORTLET = "SkinBrowser"; // Portlet accessable by general user, role = user
-// private static org.apache.jetspeed.om.profile.Security userSecurityRef = new PsmlSecurity( "user_security");
private static SecurityReference userSecurityRef = new BaseSecurityReference();
/**
@@ -188,8 +163,8 @@
assertTrue( "Turbine user does not have Admin role", !JetspeedRoleManagement.hasRole("turbine","admin"));
assertTrue( "Turbine user has User role", JetspeedRoleManagement.hasRole("turbine","user"));
assertNotNull( "Getting anonymous user", JetspeedSecurity.getAnonymousUser());
-// assertTrue( "anonymous user does not have Admin role", !JetspeedRoleManagement.hasRole(JetspeedSecurity.getAnonymousUser().getUserName(),"admin"));
-// assertTrue( "anonymous user does not have User role", !JetspeedRoleManagement.hasRole(JetspeedSecurity.getAnonymousUser().getUserName(),"user"));
+ assertTrue( "anonymous user does not have Admin role", !JetspeedRoleManagement.hasRole(JetspeedSecurity.getAnonymousUser().getUserName(),"admin"));
+ assertTrue( "anonymous user does not have User role", !JetspeedRoleManagement.hasRole(JetspeedSecurity.getAnonymousUser().getUserName(),"user"));
assertNotNull( "adminSecurityRef", adminSecurityRef);
adminSecurityRef.setParent("admin_only");
@@ -223,60 +198,16 @@
assertEquals( "Admin user has view access to " + ADMIN_PORTLET, true, JetspeedPortalAccessController.checkPermission( adminUser, adminEntry, "view"));
assertEquals( "Turbine user DOES NOT have view access to " + ADMIN_PORTLET, false, JetspeedPortalAccessController.checkPermission( turbineUser, adminEntry, "view"));
assertEquals( "Anonymous user DOES NOT have view access to " + ADMIN_PORTLET, false, JetspeedPortalAccessController.checkPermission( anonymousUser, adminEntry, "view"));
-// assertEquals( "null user DOES NOT have view access to " + ADMIN_PORTLET, false, JetspeedPortalAccessController.checkPermission( (JetspeedUser) null, adminEntry, "view"));
assertEquals( "Admin user has view access to " + USER_PORTLET, true, JetspeedPortalAccessController.checkPermission( adminUser, userEntry, "view"));
assertEquals( "Turbine user has view access to " + USER_PORTLET, true, JetspeedPortalAccessController.checkPermission( turbineUser, userEntry, "view"));
assertEquals( "Anonymous user DOES NOT have view access to " + USER_PORTLET, false, JetspeedPortalAccessController.checkPermission( anonymousUser, userEntry, "view"));
-// assertEquals( "null user DOES NOT have view access to " + USER_PORTLET, false, JetspeedPortalAccessController.checkPermission( (JetspeedUser) null, userEntry, "view"));
assertEquals( "Admin user has view access to " + ALL_PORTLET, true, JetspeedPortalAccessController.checkPermission( adminUser, allEntry, "view"));
assertEquals( "Turbine user has view access to " + ALL_PORTLET, true, JetspeedPortalAccessController.checkPermission( turbineUser, allEntry, "view"));
assertEquals( "Anonymous user has view access to " + ALL_PORTLET, true, JetspeedPortalAccessController.checkPermission( anonymousUser, allEntry, "view"));
-// assertEquals( "null user has view access to " + ALL_PORTLET, true, JetspeedPortalAccessController.checkPermission( (JetspeedUser) null, allEntry, "view"));
}
- public void testRegistryActions() throws Exception
- {
- JetspeedUser adminUser = (JetspeedUser) JetspeedSecurity.getUser("admin");
- assertNotNull( "Getting admin user", adminUser);
- adminUser.setHasLoggedIn(Boolean.TRUE);
-
- JetspeedUser turbineUser = (JetspeedUser) JetspeedSecurity.getUser("turbine");
- assertNotNull( "Getting turbine user", turbineUser);
- turbineUser.setHasLoggedIn(Boolean.TRUE);
-
- JetspeedUser anonymousUser = (JetspeedUser) JetspeedSecurity.getAnonymousUser();
- assertNotNull( "Getting anonymous user", anonymousUser);
-
- // Create security objects
- org.apache.jetspeed.om.registry.Security adminSecurity = new BaseSecurity("admin");
- assertNotNull( "Have admin security", adminSecurity);
- org.apache.jetspeed.om.registry.Security userSecurity = new BaseSecurity("user");
- assertNotNull( "Have user security", userSecurity);
-
- PortletEntry userPortletEntry = new BasePortletEntry();
- assertNotNull( "Have userPortletEntry", userPortletEntry);
- userPortletEntry.setName( USER_PORTLET);
- userPortletEntry.setSecurity( userSecurity);
- Parameter adminParam = new BaseParameter();
- assertNotNull( "Have adminParameter", adminParam);
- adminParam.setName("AdminParam");
- adminParam.setValue("adminValue");
- adminParam.setSecurity(adminSecurity);
- userPortletEntry.addParameter(adminParam);
-
- Parameter userParam = new BaseParameter();
- assertNotNull( "Have userParameter", userParam);
- userParam.setName("UserParam");
- userParam.setValue("userValue");
- userParam.setSecurity(userSecurity);
- userPortletEntry.addParameter(userParam);
- assertEquals( "Admin user customize access to admin parameter", true, JetspeedPortalAccessController.checkPermission( adminUser, new PortalResource( userPortletEntry, adminParam), JetspeedSecurity.PERMISSION_CUSTOMIZE));
- assertEquals( "Turbine user customize access to admin parameter", false, JetspeedPortalAccessController.checkPermission( turbineUser, new PortalResource( userPortletEntry, adminParam), JetspeedSecurity.PERMISSION_CUSTOMIZE));
- assertEquals( "Admin user customize access to admin parameter", true, JetspeedPortalAccessController.checkPermission( adminUser, new PortalResource( userPortletEntry, userParam), JetspeedSecurity.PERMISSION_CUSTOMIZE));
- assertEquals( "Turbine user customize access to admin parameter", true, JetspeedPortalAccessController.checkPermission( turbineUser, new PortalResource( userPortletEntry, userParam), JetspeedSecurity.PERMISSION_CUSTOMIZE));
- }
/*
* Setup Turbine environment
*/
No revision
No revision
1.1.2.4 +1 -15 jakarta-jetspeed/src/java/org/apache/jetspeed/services/security/Attic/PortalAccessController.java
Index: PortalAccessController.java
===================================================================
RCS file: /home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/services/security/Attic/PortalAccessController.java,v
retrieving revision 1.1.2.3
retrieving revision 1.1.2.4
diff -u -r1.1.2.3 -r1.1.2.4
--- PortalAccessController.java 1 Jun 2002 20:29:05 -0000 1.1.2.3
+++ PortalAccessController.java 19 Jun 2002 02:44:28 -0000 1.1.2.4
@@ -106,20 +106,6 @@
/**
* Given a <code>JetspeedUser</code>, authorize that user to perform the secured action on
- * the given resource of the specified resource type. If the user does not have
- * sufficient privilege to perform the action on the resource, the check returns false,
- * otherwise when sufficient privilege is present, checkPermission returns true.
- *
- * @param user the user to be checked.
- * @param resourceType an enumeration of the resource type.
- * @param resource the name of the resource.
- * @param action the secured action to be performed on the resource by the user.
- * @return boolean true if the user has sufficient privilege.
- */
- public boolean checkPermission(JetspeedUser user, int resourceType, String resource, String action);
-
- /**
- * Given a <code>JetspeedUser</code>, authorize that user to perform the secured action on
* the given resource. If the user does not have
* sufficient privilege to perform the action on the resource, the check returns false,
* otherwise when sufficient privilege is present, checkPermission returns true.
No revision
No revision
1.1.2.3 +3 -5 jakarta-jetspeed/src/java/org/apache/jetspeed/services/Attic/JetspeedPortalAccessController.java
Index: JetspeedPortalAccessController.java
===================================================================
RCS file: /home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/services/Attic/JetspeedPortalAccessController.java,v
retrieving revision 1.1.2.2
retrieving revision 1.1.2.3
diff -u -r1.1.2.2 -r1.1.2.3
--- JetspeedPortalAccessController.java 1 Jun 2002 20:29:05 -0000 1.1.2.2
+++ JetspeedPortalAccessController.java 19 Jun 2002 02:44:28 -0000 1.1.2.3
@@ -94,14 +94,12 @@
{
return getService().checkPermission(user, entry, action);
}
+
public static boolean checkPermission(JetspeedUser user, Portlet portlet, String action)
{
return getService().checkPermission(user, portlet, action);
}
- public static boolean checkPermission(JetspeedUser user, int resourceType, String resource, String action)
- {
- return getService().checkPermission(user, resourceType, resource, action);
- }
+
public static boolean checkPermission(JetspeedUser user, PortalResource resource, String action)
{
return getService().checkPermission(user, resource, action);
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>