001: /**
002: * Copyright (C) 2001 Yasna.com. All rights reserved.
003: *
004: * ===================================================================
005: * The Apache Software License, Version 1.1
006: *
007: * Redistribution and use in source and binary forms, with or without
008: * modification, are permitted provided that the following conditions
009: * are met:
010: *
011: * 1. Redistributions of source code must retain the above copyright
012: * notice, this list of conditions and the following disclaimer.
013: *
014: * 2. Redistributions in binary form must reproduce the above copyright
015: * notice, this list of conditions and the following disclaimer in
016: * the documentation and/or other materials provided with the
017: * distribution.
018: *
019: * 3. The end-user documentation included with the redistribution,
020: * if any, must include the following acknowledgment:
021: * "This product includes software developed by
022: * Yasna.com (http://www.yasna.com)."
023: * Alternately, this acknowledgment may appear in the software itself,
024: * if and wherever such third-party acknowledgments normally appear.
025: *
026: * 4. The names "Yazd" and "Yasna.com" must not be used to
027: * endorse or promote products derived from this software without
028: * prior written permission. For written permission, please
029: * contact yazd@yasna.com.
030: *
031: * 5. Products derived from this software may not be called "Yazd",
032: * nor may "Yazd" appear in their name, without prior written
033: * permission of Yasna.com.
034: *
035: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
036: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
037: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
038: * DISCLAIMED. IN NO EVENT SHALL YASNA.COM OR
039: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
040: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
041: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
042: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
043: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
044: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
045: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
046: * SUCH DAMAGE.
047: * ====================================================================
048: *
049: * This software consists of voluntary contributions made by many
050: * individuals on behalf of Yasna.com. For more information
051: * on Yasna.com, please see <http://www.yasna.com>.
052: */
053:
054: /**
055: * Copyright (C) 2000 CoolServlets.com. All rights reserved.
056: *
057: * ===================================================================
058: * The Apache Software License, Version 1.1
059: *
060: * Redistribution and use in source and binary forms, with or without
061: * modification, are permitted provided that the following conditions
062: * are met:
063: *
064: * 1. Redistributions of source code must retain the above copyright
065: * notice, this list of conditions and the following disclaimer.
066: *
067: * 2. Redistributions in binary form must reproduce the above copyright
068: * notice, this list of conditions and the following disclaimer in
069: * the documentation and/or other materials provided with the
070: * distribution.
071: *
072: * 3. The end-user documentation included with the redistribution,
073: * if any, must include the following acknowledgment:
074: * "This product includes software developed by
075: * CoolServlets.com (http://www.coolservlets.com)."
076: * Alternately, this acknowledgment may appear in the software itself,
077: * if and wherever such third-party acknowledgments normally appear.
078: *
079: * 4. The names "Jive" and "CoolServlets.com" must not be used to
080: * endorse or promote products derived from this software without
081: * prior written permission. For written permission, please
082: * contact webmaster@coolservlets.com.
083: *
084: * 5. Products derived from this software may not be called "Jive",
085: * nor may "Jive" appear in their name, without prior written
086: * permission of CoolServlets.com.
087: *
088: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
089: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
090: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
091: * DISCLAIMED. IN NO EVENT SHALL COOLSERVLETS.COM OR
092: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
093: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
094: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
095: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
096: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
097: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
098: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
099: * SUCH DAMAGE.
100: * ====================================================================
101: *
102: * This software consists of voluntary contributions made by many
103: * individuals on behalf of CoolServlets.com. For more information
104: * on CoolServlets.com, please see <http://www.coolservlets.com>.
105: */package com.Yasna.forum;
106:
107: import com.Yasna.util.*;
108:
109: /**
110: * Defines a set of permissions for objects in the forum system that
111: * users can be granted. Forum permissions are used by the protection
112: * proxy objects defined for each major component of the system.
113: */
114: public class ForumPermissions implements Cacheable {
115:
116: /**
117: * Permission to read object.
118: */
119: public static final int READ = 0;
120:
121: /**
122: * Permission to administer the entire sytem.
123: */
124: public static final int SYSTEM_ADMIN = 1;
125:
126: /**
127: * Permission to administer a particular forum.
128: */
129: public static final int FORUM_ADMIN = 2;
130:
131: /**
132: * Permission to administer a particular user.
133: */
134: public static final int USER_ADMIN = 3;
135:
136: /**
137: * Permission to administer a particular group.
138: */
139: public static final int GROUP_ADMIN = 4;
140:
141: /**
142: * Permission to take on a moderator role.
143: */
144: public static final int MODERATOR = 5;
145:
146: /**
147: * Permission to create a new thread.
148: */
149: public static final int CREATE_THREAD = 6;
150:
151: /**
152: * Permission to create a new message.
153: */
154: public static final int CREATE_MESSAGE = 7;
155:
156: private boolean[] values = new boolean[8];
157:
158: /**
159: * Factory method to create full permissions.
160: */
161: public static ForumPermissions full() {
162: return new ForumPermissions(true, true, true, true, true, true,
163: true, true);
164: }
165:
166: /**
167: * Factory method to create an object with no permissions.
168: */
169: public static ForumPermissions none() {
170: return new ForumPermissions(false, false, false, false, false,
171: false, false, false);
172: }
173:
174: /**
175: * Factory method to create an object with read-only permissions.
176: */
177: public static ForumPermissions readOnly() {
178: return new ForumPermissions(true, false, false, false, false,
179: false, false, false);
180: }
181:
182: /**
183: * Create a new permissions object with the specified permissions.
184: */
185: public ForumPermissions(boolean READ, boolean SYSTEM_ADMIN,
186: boolean FORUM_ADMIN, boolean USER_ADMIN,
187: boolean GROUP_ADMIN, boolean MODERATOR,
188: boolean CREATE_THREAD, boolean CREATE_MESSAGE) {
189: values[0] = READ;
190: values[1] = SYSTEM_ADMIN;
191: values[2] = FORUM_ADMIN;
192: values[3] = USER_ADMIN;
193: values[4] = GROUP_ADMIN;
194: values[5] = MODERATOR;
195: values[6] = CREATE_THREAD;
196: values[7] = CREATE_MESSAGE;
197: }
198:
199: /**
200: * Creates a new ForumPermission object by combining two permissions
201: * objects. The higher permission of each permission type will be used.
202: */
203: public ForumPermissions(ForumPermissions perm1,
204: ForumPermissions perm2) {
205: values[0] = perm1.get(0) || perm2.get(0);
206: values[1] = perm1.get(1) || perm2.get(1);
207: values[2] = perm1.get(2) || perm2.get(2);
208: values[3] = perm1.get(3) || perm2.get(3);
209: values[4] = perm1.get(4) || perm2.get(4);
210: values[5] = perm1.get(5) || perm2.get(5);
211: values[6] = perm1.get(6) || perm2.get(6);
212: values[7] = perm1.get(7) || perm2.get(7);
213: }
214:
215: public ForumPermissions(boolean[] permissions) {
216: this .values = permissions;
217: }
218:
219: public String toString() {
220: StringBuffer buf = new StringBuffer();
221: for (int i = 0; i < values.length - 1; i++) {
222: buf.append(values[i]).append(",");
223: }
224: buf.append(values[values.length - 1]);
225: return buf.toString();
226: }
227:
228: /**
229: * Returns true if the permission of a particular type is allowed.
230: */
231: public boolean get(int type) {
232: if (type < 0 || type > 7) {
233: return false;
234: }
235: return values[type];
236: }
237:
238: /**
239: * Returns true if the permissions include system or forum admin
240: * permissions.
241: */
242: public boolean isSystemOrForumAdmin() {
243: return (values[FORUM_ADMIN] || values[SYSTEM_ADMIN]);
244: }
245:
246: //FROM THE CACHEABLE INTERFACE//
247:
248: public int getSize() {
249: //Approximate the size of the object in bytes by calculating the size
250: //of each field.
251: int size = 0;
252: size += CacheSizes.sizeOfObject(); //overhead of object
253: size += CacheSizes.sizeOfObject(); //ref to array
254: size += CacheSizes.sizeOfBoolean() * 8; //boolean array vals
255: return size;
256: }
257: }
|