001: /*
002: * File : $Source: /usr/local/cvs/opencms/src/org/opencms/security/I_CmsPermissionHandler.java,v $
003: * Date : $Date: 2008-02-27 12:05:29 $
004: * Version: $Revision: 1.4 $
005: *
006: * This library is part of OpenCms -
007: * the Open Source Content Management System
008: *
009: * Copyright (c) 2002 - 2008 Alkacon Software GmbH (http://www.alkacon.com)
010: *
011: * This library is free software; you can redistribute it and/or
012: * modify it under the terms of the GNU Lesser General Public
013: * License as published by the Free Software Foundation; either
014: * version 2.1 of the License, or (at your option) any later version.
015: *
016: * This library is distributed in the hope that it will be useful,
017: * but WITHOUT ANY WARRANTY; without even the implied warranty of
018: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
019: * Lesser General Public License for more details.
020: *
021: * For further information about Alkacon Software GmbH, please see the
022: * company website: http://www.alkacon.com
023: *
024: * For further information about OpenCms, please see the
025: * project website: http://www.opencms.org
026: *
027: * You should have received a copy of the GNU Lesser General Public
028: * License along with this library; if not, write to the Free Software
029: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
030: */
031:
032: package org.opencms.security;
033:
034: import org.opencms.configuration.CmsSystemConfiguration;
035: import org.opencms.db.CmsDbContext;
036: import org.opencms.db.CmsDriverManager;
037: import org.opencms.file.CmsResource;
038: import org.opencms.file.CmsResourceFilter;
039: import org.opencms.main.CmsException;
040: import org.opencms.util.A_CmsModeIntEnumeration;
041:
042: /**
043: * Default permission handler implementation.<p>
044: *
045: * @author Michael Moossen
046: *
047: * @version $Revision: 1.4 $
048: *
049: * @since 7.0.2
050: *
051: * @see org.opencms.db.CmsSecurityManager#hasPermissions(org.opencms.file.CmsRequestContext, CmsResource, CmsPermissionSet, boolean, CmsResourceFilter)
052: */
053: public interface I_CmsPermissionHandler {
054:
055: /**
056: * Enumeration class for the results of {@link I_CmsPermissionHandler#hasPermissions(CmsDbContext, CmsResource, CmsPermissionSet, boolean, CmsResourceFilter)}.<p>
057: */
058: public static final class CmsPermissionCheckResult extends
059: A_CmsModeIntEnumeration {
060:
061: /** Indicates allowed permissions. */
062: protected static final CmsPermissionCheckResult ALLOWED = new CmsPermissionCheckResult(
063: 1);
064:
065: /** Indicates denied permissions. */
066: protected static final CmsPermissionCheckResult DENIED = new CmsPermissionCheckResult(
067: 2);
068:
069: /** Indicates a resource was filtered during permission check. */
070: protected static final CmsPermissionCheckResult FILTERED = new CmsPermissionCheckResult(
071: 3);
072:
073: /** Indicates a resource was not locked for a write / control operation. */
074: protected static final CmsPermissionCheckResult NOTLOCKED = new CmsPermissionCheckResult(
075: 4);
076:
077: /** Version id required for safe serialization. */
078: private static final long serialVersionUID = 2398277834335860916L;
079:
080: /**
081: * Private constructor.<p>
082: *
083: * @param mode the copy mode integer representation
084: */
085: private CmsPermissionCheckResult(int mode) {
086:
087: super (mode);
088: }
089:
090: /**
091: * Checks if this permission is allowed or not.<p>
092: *
093: * @return <code>true</code> if allowed
094: */
095: public boolean isAllowed() {
096:
097: return (this == ALLOWED);
098: }
099: }
100:
101: /** Indicates allowed permissions. */
102: CmsPermissionCheckResult PERM_ALLOWED = CmsPermissionCheckResult.ALLOWED;
103: /** Indicates denied permissions. */
104: CmsPermissionCheckResult PERM_DENIED = CmsPermissionCheckResult.DENIED;
105: /** Indicates a resource was filtered during permission check. */
106: CmsPermissionCheckResult PERM_FILTERED = CmsPermissionCheckResult.FILTERED;
107: /** Indicates a resource was not locked for a write / control operation. */
108: CmsPermissionCheckResult PERM_NOTLOCKED = CmsPermissionCheckResult.NOTLOCKED;
109:
110: /**
111: * Performs a non-blocking permission check on a resource.<p>
112: *
113: * This test will not throw an exception in case the required permissions are not
114: * available for the requested operation. Instead, it will return one of the
115: * following values:<ul>
116: * <li><code>{@link #PERM_ALLOWED}</code></li>
117: * <li><code>{@link #PERM_FILTERED}</code></li>
118: * <li><code>{@link #PERM_DENIED}</code></li></ul><p>
119: *
120: * Despite of the fact that the results of this method are cached, this method should
121: * be as fast as possible since it is called really often.<p>
122: *
123: * @param dbc the current database context
124: * @param resource the resource on which permissions are required
125: * @param requiredPermissions the set of permissions required for the operation
126: * @param checkLock if true, a lock for the current user is required for
127: * all write operations, if false it's ok to write as long as the resource
128: * is not locked by another user
129: * @param filter the resource filter to use
130: *
131: * @return <code>{@link #PERM_ALLOWED}</code> if the user has sufficient permissions on the resource
132: * for the requested operation
133: *
134: * @throws CmsException in case of i/o errors (NOT because of insufficient permissions)
135: */
136: CmsPermissionCheckResult hasPermissions(CmsDbContext dbc,
137: CmsResource resource, CmsPermissionSet requiredPermissions,
138: boolean checkLock, CmsResourceFilter filter)
139: throws CmsException;
140:
141: /**
142: * Initializes internal variables needed to work.<p>
143: *
144: * @param driverManager the driver manager
145: * @param systemConfiguration the system configuration instance
146: */
147: void init(CmsDriverManager driverManager,
148: CmsSystemConfiguration systemConfiguration);
149: }
|