001: /*
002:
003: Derby - Class org.apache.derby.iapi.sql.dictionary.PermissionsDescriptor
004:
005: Licensed to the Apache Software Foundation (ASF) under one or more
006: contributor license agreements. See the NOTICE file distributed with
007: this work for additional information regarding copyright ownership.
008: The ASF licenses this file to you under the Apache License, Version 2.0
009: (the "License"); you may not use this file except in compliance with
010: the License. You may obtain a copy of the License at
011:
012: http://www.apache.org/licenses/LICENSE-2.0
013:
014: Unless required by applicable law or agreed to in writing, software
015: distributed under the License is distributed on an "AS IS" BASIS,
016: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
017: See the License for the specific language governing permissions and
018: limitations under the License.
019:
020: */
021:
022: package org.apache.derby.iapi.sql.dictionary;
023:
024: import org.apache.derby.catalog.UUID;
025: import org.apache.derby.iapi.error.StandardException;
026: import org.apache.derby.iapi.sql.depend.Provider;
027: import org.apache.derby.iapi.sql.dictionary.DataDictionary;
028: import org.apache.derby.iapi.services.sanity.SanityManager;
029:
030: /**
031: * This class is used by rows in the SYS.SYSTABLEPERMS, SYS.SYSCOLPERMS, and SYS.SYSROUTINEPERMS
032: * system tables.
033: */
034: public abstract class PermissionsDescriptor extends TupleDescriptor
035: implements Cloneable, Provider {
036: protected UUID oid;
037: private String grantee;
038: private final String grantor;
039:
040: PermissionsDescriptor(DataDictionary dd, String grantee,
041: String grantor) {
042: super (dd);
043: this .grantee = grantee;
044: this .grantor = grantor;
045: }
046:
047: public Object clone() {
048: try {
049: return super .clone();
050: } catch (java.lang.CloneNotSupportedException cnse) {
051: if (SanityManager.DEBUG)
052: SanityManager.THROWASSERT("Could not clone a "
053: + getClass().getName());
054: return null;
055: }
056: }
057:
058: public abstract int getCatalogNumber();
059:
060: /**
061: * @return true iff the key part of this permissions descriptor equals the key part of another permissions
062: * descriptor.
063: */
064: protected boolean keyEquals(PermissionsDescriptor other) {
065: return grantee.equals(other.grantee);
066: }
067:
068: /**
069: * @return the hashCode for the key part of this permissions descriptor
070: */
071: protected int keyHashCode() {
072: return grantee.hashCode();
073: }
074:
075: public void setGrantee(String grantee) {
076: this .grantee = grantee;
077: }
078:
079: /*----- getter functions for rowfactory ------*/
080: public final String getGrantee() {
081: return grantee;
082: }
083:
084: public final String getGrantor() {
085: return grantor;
086: }
087:
088: /**
089: * Gets the UUID of the table.
090: *
091: * @return The UUID of the table.
092: */
093: public UUID getUUID() {
094: return oid;
095: }
096:
097: /**
098: * Sets the UUID of the table
099: *
100: * @param oid The UUID of the table to be set in the descriptor
101: */
102: public void setUUID(UUID oid) {
103: this .oid = oid;
104: }
105:
106: /**
107: * This method checks if the passed authorization id is same as the owner
108: * of the object on which this permission is defined. This method gets
109: * called by create view/constraint/trigger to see if this permission
110: * needs to be saved in dependency system for the view/constraint/trigger.
111: * If the same user is the owner of the the object being accessed and the
112: * newly created object, then no need to keep this privilege dependency
113: *
114: * @return boolean If passed authorization id is owner of the table
115: */
116: public abstract boolean checkOwner(String authorizationId)
117: throws StandardException;
118:
119: //////////////////////////////////////////////
120: //
121: // PROVIDER INTERFACE
122: //
123: ////////////////////////////////////////////////////////////////////
124:
125: /**
126: * Get the provider's UUID
127: *
128: * @return The provider's UUID
129: */
130: public UUID getObjectID() {
131: return oid;
132: }
133:
134: /**
135: * Is this provider persistent? A stored dependency will be required
136: * if both the dependent and provider are persistent.
137: *
138: * @return boolean Whether or not this provider is persistent.
139: */
140: public boolean isPersistent() {
141: return true;
142: }
143: }
|