📄 dbpermissionsmanager.java
字号:
/**
* $RCSfile: DbPermissionsManager.java,v $
* $Revision: 1.1.1.1 $
* $Date: 2002/09/09 13:50:56 $
*
* New Jive from Jdon.com.
*
* This software is the proprietary information of CoolServlets, Inc.
* Use is subject to license terms.
*/
package com.jivesoftware.forum.database;
import com.jivesoftware.forum.*;
import com.jivesoftware.util.*;
import java.util.*;
import java.sql.*;
/**
* Database implementation of the PermissionsManager interface.
*/
public class DbPermissionsManager implements PermissionsManager {
/** DATABASE QUERIES **/
private static final String ADD_USER_PERM =
"INSERT INTO jiveUserPerm(forumID,userID,userType,permission) VALUES(?,?,?,?)";
private static final String ADD_GROUP_PERM =
"INSERT INTO jiveGroupPerm(forumID,groupID,permission) VALUES(?,?,?)";
private static final String REMOVE_GROUP_PERM =
"DELETE FROM jiveGroupPerm WHERE forumID=? AND groupID=? AND permission=?";
private long forumID;
private DbForumFactory factory;
/**
* Constructs a new DbPermissionsManager. The forumID indicates what forum
* the permissions management will be for. If the forumID is -1, that means
* system permissions will be being used.
*/
public DbPermissionsManager(long forumID, DbForumFactory factory) {
this.forumID = forumID;
this.factory = factory;
}
//FROM THE PERMISSIONSMANAGER INTERFACE//
public void addUserPermission(User user, int permissionType) {
if (!userHasPermission(user, permissionType)) {
addUserPermission(user.getID(), permissionType);
}
}
public void addAnonymousUserPermission(int permissionType) {
if (!anonymousUserHasPermission(permissionType)) {
addUserPermission(-1, permissionType);
}
}
public void addRegisteredUserPermission(int permissionType) {
if (!registeredUserHasPermission(permissionType)) {
addUserPermission(0, permissionType);
}
}
public void removeUserPermission(User user, int permissionType) {
removeUserPermission(user.getID(), permissionType);
}
public void removeAllUserPermissions() {
Connection con = null;
Statement stmt = null;
try {
con = ConnectionManager.getConnection();
stmt = con.createStatement();
StringBuffer sql = new StringBuffer("DELETE FROM jiveUserPerm WHERE ");
if (forumID == -1) {
sql.append("forumID IS NULL");
}
else {
sql.append("forumID=").append(forumID);
}
stmt.execute(sql.toString());
//Remove user permissions from cache since they've changed.
factory.cacheManager.userPermsCache.remove(forumID);
}
catch( SQLException sqle ) {
sqle.printStackTrace();
}
finally {
try { stmt.close(); }
catch (Exception e) { e.printStackTrace(); }
try { con.close(); }
catch (Exception e) { e.printStackTrace(); }
}
}
public void removeAnonymousUserPermission(int permissionType) {
removeUserPermission(-1, permissionType);
}
public void removeRegisteredUserPermission(int permissionType) {
removeUserPermission(0, permissionType);
}
public boolean userHasPermission(User user, int permissionType) {
return userHasPermission(user.getID(), permissionType);
}
public boolean anonymousUserHasPermission(int permissionType) {
return userHasPermission(-1, permissionType);
}
public boolean registeredUserHasPermission(int permissionType) {
return userHasPermission(0, permissionType);
}
public Iterator usersWithPermission(int permissionType) {
LongList users = new LongList();
Connection con = null;
Statement stmt = null;
try {
con = ConnectionManager.getConnection();
stmt = con.createStatement();
StringBuffer query = new StringBuffer(83);
query.append("SELECT DISTINCT userID FROM jiveUserPerm WHERE ");
if (forumID == -1) {
query.append("forumID IS NULL");
}
else {
query.append("forumID=").append(forumID);
}
query.append(" AND permission=").append(permissionType);
ResultSet rs = stmt.executeQuery(query.toString());
while (rs.next()) {
users.add(rs.getInt(1));
}
}
catch( SQLException sqle ) {
sqle.printStackTrace();
}
finally {
try { stmt.close(); }
catch (Exception e) { e.printStackTrace(); }
try { con.close(); }
catch (Exception e) { e.printStackTrace(); }
}
return new DatabaseObjectIterator(JiveGlobals.USER, users.toArray(),
factory.getUserManager());
}
public int usersWithPermissionCount(int permissionType) {
int userCount = 0;
Connection con = null;
Statement stmt = null;
try {
con = ConnectionManager.getConnection();
stmt = con.createStatement();
StringBuffer query = new StringBuffer(83);
query.append("SELECT count(userID) FROM jiveUserPerm WHERE ");
if (forumID == -1) {
query.append("forumID IS NULL");
}
else {
query.append("forumID=").append(forumID);
}
query.append(" AND permission=").append(permissionType);
ResultSet rs = stmt.executeQuery(query.toString());
if (rs.next()) {
userCount = rs.getInt(1);
}
}
catch( SQLException sqle ) {
sqle.printStackTrace();
}
finally {
try { stmt.close(); }
catch (Exception e) { e.printStackTrace(); }
try { con.close(); }
catch (Exception e) { e.printStackTrace(); }
}
return userCount;
}
public void addGroupPermission(Group group, int permissionType) {
Connection con = null;
PreparedStatement pstmt = null;
try {
con = ConnectionManager.getConnection();
pstmt = con.prepareStatement(ADD_GROUP_PERM);
pstmt.setLong(1,forumID);
pstmt.setLong(2,group.getID());
pstmt.setInt(3,permissionType);
pstmt.execute();
//Remove user permissions from cache since they've changed. Because
//of the way that user perm cache is handled, it is easiest to
//simply remove all the user perm cache for the forum. This is ok
//since it happens infrequently.
factory.cacheManager.userPermsCache.remove(forumID);
}
catch( SQLException sqle ) {
sqle.printStackTrace();
}
finally {
try { pstmt.close(); }
catch (Exception e) { e.printStackTrace(); }
try { con.close(); }
catch (Exception e) { e.printStackTrace(); }
}
}
public void removeGroupPermission(Group group, int permissionType) {
Connection con = null;
Statement stmt = null;
try {
con = ConnectionManager.getConnection();
stmt = con.createStatement();
StringBuffer sql = new StringBuffer("DELETE FROM jiveGroupPerm WHERE ");
if (forumID == -1) {
sql.append("forumID IS NULL ");
}
else {
sql.append("forumID=").append(forumID).append(" ");
}
sql.append("AND groupID=").append(group.getID()).append(" ");
sql.append("AND permission=").append(permissionType);
stmt.execute(sql.toString());
//Remove user permissions from cache since they've changed. Because
//of the way that user perm cache is handled, it is easiest to
//simply remove all the user perm cache for the forum. This is ok
//since it happens infrequently.
factory.cacheManager.userPermsCache.remove(forumID);
}
catch( SQLException sqle ) {
sqle.printStackTrace();
}
finally {
try { stmt.close(); }
catch (Exception e) { e.printStackTrace(); }
try { con.close(); }
catch (Exception e) { e.printStackTrace(); }
}
}
public void removeAllGroupPermissions() {
Connection con = null;
Statement stmt = null;
try {
con = ConnectionManager.getConnection();
stmt = con.createStatement();
StringBuffer sql = new StringBuffer("DELETE FROM jiveGroupPerm WHERE ");
if (forumID == -1) {
sql.append("forumID IS NULL");
}
else {
sql.append("forumID=").append(forumID);
}
stmt.execute(sql.toString());
//Remove user permissions from cache since they've changed.
factory.cacheManager.userPermsCache.remove(forumID);
}
catch( SQLException sqle ) {
sqle.printStackTrace();
}
finally {
try { stmt.close(); }
catch (Exception e) { e.printStackTrace(); }
try { con.close(); }
catch (Exception e) { e.printStackTrace(); }
}
}
public Iterator groupsWithPermission(int permissionType) {
LongList groups = new LongList();
Connection con = null;
Statement stmt = null;
try {
con = ConnectionManager.getConnection();
stmt = con.createStatement();
StringBuffer sql = new StringBuffer(
"SELECT groupID FROM jiveGroupPerm WHERE "
);
sql.append("forumID=").append(forumID).append(" ");
sql.append(" AND permission=").append(permissionType);
ResultSet rs = stmt.executeQuery(sql.toString());
while (rs.next()) {
groups.add(rs.getLong(1));
}
}
catch( SQLException sqle ) {
sqle.printStackTrace();
}
finally {
try { stmt.close(); }
catch (Exception e) { e.printStackTrace(); }
try { con.close(); }
catch (Exception e) { e.printStackTrace(); }
}
return new DatabaseObjectIterator(JiveGlobals.GROUP, groups.toArray(),
factory.getGroupManager());
}
public int groupsWithPermissionCount(int permissionType) {
int groupCount = 0;
Connection con = null;
Statement stmt = null;
try {
con = ConnectionManager.getConnection();
stmt = con.createStatement();
StringBuffer sql = new StringBuffer(
"SELECT count(groupID) FROM jiveGroupPerm WHERE "
);
sql.append("forumID=").append(forumID).append(" ");
sql.append(" AND permission=").append(permissionType);
ResultSet rs = stmt.executeQuery(sql.toString());
if (rs.next()) {
groupCount = rs.getInt(1);
}
}
catch( SQLException sqle ) {
sqle.printStackTrace();
}
finally {
try { stmt.close(); }
catch (Exception e) { e.printStackTrace(); }
try { con.close(); }
catch (Exception e) { e.printStackTrace(); }
}
return groupCount;
}
//OTHER METHODS//
/**
* Returns the ForumPermissions object that corresponds to the combined
* permissions that a user has for a particular forum (or their global
* permissions if the forumID is -1). This consists of:
* <ul>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -