001 /*
002 Licensed to the Apache Software Foundation (ASF) under one
003 or more contributor license agreements. See the NOTICE file
004 distributed with this work for additional information
005 regarding copyright ownership. The ASF licenses this file
006 to you under the Apache License, Version 2.0 (the
007 "License"); you may not use this file except in compliance
008 with the License. You may obtain a copy of the License at
009
010 http://www.apache.org/licenses/LICENSE-2.0
011
012 Unless required by applicable law or agreed to in writing,
013 software distributed under the License is distributed on an
014 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015 KIND, either express or implied. See the License for the
016 specific language governing permissions and limitations
017 under the License.
018 */
019 package org.apache.wiki.auth.permissions;
020
021 import java.io.Serializable;
022 import java.security.Permission;
023 import java.security.PermissionCollection;
024
025 /**
026 * <p>
027 * Permission to perform all operations on a given wiki.
028 * </p>
029 * @since 2.3.80
030 */
031 public final class AllPermission extends Permission implements Serializable
032 {
033 private static final long serialVersionUID = 1L;
034
035 private static final String WILDCARD = "*";
036
037 private final String m_wiki;
038
039 /** For serialization purposes. */
040 protected AllPermission()
041 {
042 this(null);
043 }
044
045 /**
046 * Creates a new AllPermission for the given wikis.
047 *
048 * @param wiki the wiki to which the permission should apply. If null, will
049 * apply to all wikis.
050 */
051 public AllPermission( String wiki )
052 {
053 super( wiki );
054 m_wiki = ( wiki == null ) ? WILDCARD : wiki;
055 }
056
057 /**
058 * Two AllPermission objects are considered equal if their wikis are equal.
059 * @see java.lang.Object#equals(java.lang.Object)
060 *
061 * @return {@inheritDoc}
062 * @param obj {@inheritDoc}
063 */
064 public boolean equals( Object obj )
065 {
066 if ( !( obj instanceof AllPermission ) )
067 {
068 return false;
069 }
070 AllPermission p = (AllPermission) obj;
071 return p.m_wiki != null && p.m_wiki.equals( m_wiki );
072 }
073
074 /**
075 * No-op; always returns <code>null</code>
076 * @see java.security.Permission#getActions()
077 *
078 * @return Always null.
079 */
080 public String getActions()
081 {
082 return null;
083 }
084
085 /**
086 * Returns the name of the wiki containing the page represented by this
087 * permission; may return the wildcard string.
088 * @return The wiki
089 */
090 public String getWiki()
091 {
092 return m_wiki;
093 }
094
095 /**
096 * Returns the hash code for this WikiPermission.
097 * @see java.lang.Object#hashCode()
098 *
099 * @return {@inheritDoc}
100 */
101 public int hashCode()
102 {
103 return m_wiki.hashCode();
104 }
105
106 /**
107 * WikiPermission can only imply other WikiPermissions; no other permission
108 * types are implied. One WikiPermission implies another if all of the other
109 * WikiPermission's actions are equal to, or a subset of, those for this
110 * permission.
111 * @param permission the permission which may (or may not) be implied by
112 * this instance
113 * @return <code>true</code> if the permission is implied,
114 * <code>false</code> otherwise
115 * @see java.security.Permission#implies(java.security.Permission)
116 */
117 public boolean implies( Permission permission )
118 {
119 // Permission must be a JSPWiki permission, PagePermission or AllPermission
120 if ( !isJSPWikiPermission( permission ) )
121 {
122 return false;
123 }
124 String wiki = null;
125 if ( permission instanceof AllPermission )
126 {
127 wiki = ( (AllPermission) permission ).getWiki();
128 }
129 else if ( permission instanceof PagePermission )
130 {
131 wiki = ( (PagePermission) permission ).getWiki();
132 }
133 if ( permission instanceof WikiPermission )
134 {
135 wiki = ( (WikiPermission) permission ).getWiki();
136 }
137 if ( permission instanceof GroupPermission )
138 {
139 wiki = ( (GroupPermission) permission ).getWiki();
140 }
141
142 // If the wiki is implied, it's allowed
143 return PagePermission.isSubset( m_wiki, wiki );
144 }
145
146 /**
147 * Returns a new {@link AllPermissionCollection}.
148 * @see java.security.Permission#newPermissionCollection()
149 *
150 * @return {@inheritDoc}
151 */
152 public PermissionCollection newPermissionCollection()
153 {
154 return new AllPermissionCollection();
155 }
156
157 /**
158 * Prints a human-readable representation of this permission.
159 * @see java.lang.Object#toString()
160 * @return {@inheritDoc}
161 */
162 public String toString()
163 {
164 return "(\"" + this.getClass().getName() + "\",\"" + m_wiki + "\")";
165 }
166
167 /**
168 * Checks if the given permission is one of ours.
169 *
170 * @param permission Permission to check
171 * @return true, if the permission is a JSPWiki permission; false otherwise.
172 */
173 protected static boolean isJSPWikiPermission( Permission permission )
174 {
175 return permission instanceof WikiPermission ||
176 permission instanceof PagePermission ||
177 permission instanceof GroupPermission ||
178 permission instanceof AllPermission;
179 }
180
181 }