001: /*
002: * $Header: /cvsroot/mvnforum/mvnforum/src/com/mvnforum/auth/ForumListPermission.java,v 1.13 2007/10/09 11:09:11 lexuanttkhtn Exp $
003: * $Author: lexuanttkhtn $
004: * $Revision: 1.13 $
005: * $Date: 2007/10/09 11:09:11 $
006: *
007: * ====================================================================
008: *
009: * Copyright (C) 2002-2007 by MyVietnam.net
010: *
011: * All copyright notices regarding mvnForum MUST remain
012: * intact in the scripts and in the outputted HTML.
013: * The "powered by" text/logo with a link back to
014: * http://www.mvnForum.com and http://www.MyVietnam.net in
015: * the footer of the pages MUST remain visible when the pages
016: * are viewed on the internet or intranet.
017: *
018: * This program is free software; you can redistribute it and/or modify
019: * it under the terms of the GNU General Public License as published by
020: * the Free Software Foundation; either version 2 of the License, or
021: * any later version.
022: *
023: * This program is distributed in the hope that it will be useful,
024: * but WITHOUT ANY WARRANTY; without even the implied warranty of
025: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
026: * GNU General Public License for more details.
027: *
028: * You should have received a copy of the GNU General Public License
029: * along with this program; if not, write to the Free Software
030: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
031: *
032: * Support can be obtained from support forums at:
033: * http://www.mvnForum.com/mvnforum/index
034: *
035: * Correspondence and Marketing Questions can be sent to:
036: * info at MyVietnam net
037: *
038: * @author: Minh Nguyen
039: * @author: Mai Nguyen
040: */
041: package com.mvnforum.auth;
042:
043: import java.util.*;
044:
045: import com.mvnforum.db.ForumBean;
046: import com.mvnforum.db.ForumCache;
047:
048: import net.myvietnam.mvncore.exception.ObjectNotFoundException;
049:
050: import org.apache.commons.logging.Log;
051: import org.apache.commons.logging.LogFactory;
052:
053: /**
054: * This class is used in MVNForumPermissionImpl to imnplement forum-specific permission
055: * NOTE: This class is NOT thread-safe
056: */
057: class ForumListPermission {
058:
059: private static Log log = LogFactory
060: .getLog(ForumListPermission.class);
061:
062: ArrayList forumList = new ArrayList();
063:
064: boolean allForumsPermission = false;
065:
066: boolean bypassPrivateForum = false;
067:
068: public ForumListPermission() {
069: }
070:
071: void setAllForumsPermission(boolean permission) {
072: allForumsPermission = permission;
073: }
074:
075: boolean isGlobalPermission() {
076: return allForumsPermission;
077: }
078:
079: void setForumPermission(int forumID, boolean permission) {
080: // always remove forumid
081: for (Iterator iter = forumList.iterator(); iter.hasNext();) {
082: int currentForumID = ((Integer) iter.next()).intValue();
083: if (currentForumID == forumID) {
084: iter.remove();
085: }
086: } //for
087:
088: // now add to the list if the permission = true
089: if (permission) {
090: // add permission
091: forumList.add(new Integer(forumID));
092: }
093: }
094:
095: boolean hasPermission(int forumID) {
096:
097: for (int i = 0; i < forumList.size(); i++) {
098: int currentForumID = ((Integer) forumList.get(i))
099: .intValue();
100: if (currentForumID == forumID) {
101: return true;
102: }
103: }
104:
105: // have permission on all forums, then we check if this is a Private Forum
106: if (allForumsPermission) {
107: if (bypassPrivateForum) {
108: return true;
109: }
110:
111: try {
112: ForumBean forumBean = ForumCache.getInstance().getBean(
113: forumID);
114: if (forumBean.getForumType() == ForumBean.FORUM_TYPE_DEFAULT) {
115: return true;
116: }
117: } catch (ObjectNotFoundException ex) {
118: log
119: .error(
120: "Cannot get the ForumBean in ForumListPermission (ObjectNotFoundException)",
121: ex);
122: } catch (Exception ex) {
123: log
124: .error(
125: "Cannot get the ForumBean in ForumListPermission",
126: ex);
127: }
128: }
129:
130: // if not found, then we return false (no permission on the forum)
131: return false;
132: }
133:
134: boolean hasPermssionInAtLeastOneForum() {
135:
136: // now check if have permission on any forums by checking the forumList size
137: if (forumList.size() > 0) {
138: // forumList size > 0 means there is permission on at least one forum
139: return true;
140: }
141:
142: // have permission on all forums, then we check if this is a Private Forum
143: if (allForumsPermission) {
144: if (bypassPrivateForum) {
145: return true;
146: }
147:
148: try {
149: Collection forumBeans = ForumCache.getInstance()
150: .getBeans();
151: for (Iterator iter = forumBeans.iterator(); iter
152: .hasNext();) {
153: ForumBean forumBean = (ForumBean) iter.next();
154: if (forumBean.getForumType() == ForumBean.FORUM_TYPE_DEFAULT) {
155: return true;
156: }
157: }
158: } catch (Exception ex) {
159: log.error(
160: "Cannot get ForumBeans in ForumListPermission",
161: ex);
162: }
163: }
164:
165: // if not found, then we return false (no permission on any forums)
166: return false;
167: }
168:
169: public boolean isBypassPrivateForum() {
170: return bypassPrivateForum;
171: }
172:
173: public void setBypassPrivateForum(boolean ignorePrivateOption) {
174: this.bypassPrivateForum = ignorePrivateOption;
175: }
176: }
|