001: /*
002: * JBoss, Home of Professional Open Source.
003: * Copyright 2006, Red Hat Middleware LLC, and individual contributors
004: * as indicated by the @author tags. See the copyright.txt file in the
005: * distribution for a full listing of individual contributors.
006: *
007: * This is free software; you can redistribute it and/or modify it
008: * under the terms of the GNU Lesser General Public License as
009: * published by the Free Software Foundation; either version 2.1 of
010: * the License, or (at your option) any later version.
011: *
012: * This software is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: *
017: * You should have received a copy of the GNU Lesser General Public
018: * License along with this software; if not, write to the Free
019: * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
021: */
022: package javax.security.jacc;
023:
024: import java.io.Serializable;
025: import java.security.Permission;
026:
027: import org.jboss.util.id.SerialVersion;
028:
029: /** Class for EJB isCallerInRole (String reference) permissions. An
030: * EJBRoleRefPermission is a named permission and has actions.
031: *
032: * The name of an EJBRoleRefPermission contains the value of the ejb-name
033: * element in the application's deployment descriptor that identifies the EJB
034: * in whose context the permission is being evalutated.
035: *
036: * The actions of an EJBRoleRefPermission identifies the role reference to which
037: * the permission applies. An EJBRoleRefPermission is checked to determine if
038: * the subject is a member of the role identified by the reference.
039: *
040: * Implementations of this class MAY implement newPermissionCollection or
041: * inherit its implementation from the super class.
042: *
043: * @author Scott.Stark@jboss.org
044: * @author Ron Monzillo, Gary Ellison (javadoc)
045: * @version $Revision: 57196 $
046: */
047: public final class EJBRoleRefPermission extends Permission implements
048: Serializable {
049: /** @since 4.0.2 */
050: private static final long serialVersionUID;
051: static {
052: if (SerialVersion.version == SerialVersion.LEGACY)
053: serialVersionUID = -4374811682927746472L;
054: else
055: serialVersionUID = 1;
056: }
057:
058: /** The security-role-ref/role-link value */
059: private String actions;
060: private transient int hashCode;
061:
062: /** Creates a new EJBRoleRefPermission with the specified name and actions.
063: *
064: * @param ejbName - the ejb-name that identifies the EJB in whose context the
065: * role references are to be evaluated.
066: * @param actions - identifies the role reference to which the permission
067: * pertains. The role reference is scoped to the EJB identified in the name
068: * parameter. The value of the role reference must not be null or the empty
069: * string.
070: */
071: public EJBRoleRefPermission(String ejbName, String actions) {
072: super (ejbName);
073: this .actions = actions;
074: this .hashCode = ejbName.hashCode() + actions.hashCode();
075: }
076:
077: /** Test an EJBRoleRefPermission for equality.
078: *
079: * @param p
080: * @return
081: */
082: public boolean equals(Object p) {
083: if (p == this )
084: return true;
085: if ((p instanceof EJBRoleRefPermission) == false)
086: return false;
087:
088: boolean equals = false;
089: EJBRoleRefPermission errp = (EJBRoleRefPermission) p;
090: String pname = errp.getName();
091: if (this .getName().equals(pname)) {
092: String pactions = errp.getActions();
093: if (this .getActions().equals(pactions))
094: equals = true;
095: }
096: return equals;
097: }
098:
099: public String getActions() {
100: return actions;
101: }
102:
103: public int hashCode() {
104: return hashCode;
105: }
106:
107: /** Determines if the argument Permission is "implied by" this
108: * EJBRoleRefPermission. For this to be the case,
109: *
110: * - The argument must be an instanceof EJBRoleRefPermission
111: * - with name equivalent to that of this EJBRoleRefPermission, and
112: * - with the role reference equivalent to that of this EJBRoleRefPermission
113: * applies.
114: *
115: * The name and actions comparisons described above are case sensitive.
116: *
117: * @param p - the EJBRoleRefPermission to test
118: * @return true if the specified permission is implied by this object, false
119: * otherwise.
120: */
121: public boolean implies(Permission p) {
122: return equals(p);
123: }
124:
125: /**
126: * Returns a string describing this Permission.
127: */
128: public String toString() {
129: return "[" + getName() + ",role-ref=" + actions + "]";
130: }
131: }
|