⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbpermissionsmanager.java

📁 一个jive论坛管理的源码 学习Jive源程序
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/**
 * $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 + -