perms.jsp
来自「Jive是基于JSP/JAVA技术构架的一个大型BBS论坛系统,这是Jive论坛」· JSP 代码 · 共 662 行 · 第 1/2 页
JSP
662 行
<%/** * $RCSfile: perms.jsp,v $ * $Revision: 1.13 $ * $Date: 2002/08/10 19:29:51 $ */%><%@ page import="java.util.*, java.net.URLEncoder, com.jivesoftware.forum.*, com.jivesoftware.forum.util.*" errorPage="error.jsp"%><%@ include file="global.jsp" %><%! // Global variables, methods, etc // ALL CONSTANTS REFERRED TO IN THIS FILE ARE DEFINED IN // permMethods.jsp static final Map permNames = new HashMap(); static { permNames.put(new Integer(READ_FORUM), "Read Forum"); permNames.put(new Integer(CREATE_THREAD), "Create Thread"); permNames.put(new Integer(CREATE_MESSAGE), "Create Message"); permNames.put(new Integer(MODERATOR), "Moderator"); permNames.put(new Integer(CREATE_ATTACHMENT), "Create Attachment"); permNames.put(new Integer(SYSTEM_ADMIN), "System Admin"); permNames.put(new Integer(CAT_ADMIN), "Category Admin"); permNames.put(new Integer(FORUM_ADMIN), "Forum Admin"); permNames.put(new Integer(GROUP_ADMIN), "Group Admin"); permNames.put(new Integer(USER_ADMIN), "User Admin"); } // types of users/groups to give permissions to static final int ANYBODY = 1; static final int REGISTERED = 2; static final int USER = 3; static final int GROUP = 4; // anonymous user & special user constants static final long GUEST_ID = -1L; static final long REGISTERED_ID = 0L; // Check if attachments are enabled in this version of Jive. static boolean ATTACHMENTS_ENABLED = false; static { try { LicenseManager.validateLicense("Jive Forums Professional", "2.0"); ATTACHMENTS_ENABLED = true; } catch (Exception ignored) {} } // Returns a list of userIDs in the given list of userIDs and groupIDs. private long[] getUserIDs(String[] items) { return getIDs(items, "u"); } // Returns a list of groupIDs in the given list of userIDs and groupIDs. private long[] getGroupIDs(String[] items) { return getIDs(items, "g"); } private long[] getIDs(String[] items, String prefix) { if (items == null) { return new long[0]; } long[] IDs = new long[items.length]; int size = 0; for (int i=0; i<items.length; i++) { String item = items[i]; if (item != null && item.startsWith(prefix)) { try { IDs[size] = Long.parseLong(item.substring(1,item.length())); size++; } catch (Exception e) {} } } if (size == IDs.length) { return IDs; } else { long[] temp = new long[size]; for (int i=0; i<temp.length; i++) { temp[i] = IDs[i]; } return temp; } }%><% // Permission check if (!isSystemAdmin && !isForumAdmin && !isCatAdmin && JiveGlobals.getJiveEdition() == JiveGlobals.BASIC) { throw new UnauthorizedException("You don't have admin privileges to perform this operation."); } // Check to see what mode we're in. We're either editing forum or category // permissions. If the mode is something else, throw an exception: int mode = ParamUtils.getIntParameter(request,"mode",-1); if (mode != CAT_MODE && mode != FORUM_MODE) { throw new Exception("No permission mode specified"); } // Check to see what group of perms we're going to administer. We can // either modify user & group perms or admin permissions. int permGroup = ParamUtils.getIntParameter(request,"permGroup",-1); if (permGroup != CONTENT_GROUP && permGroup != ADMIN_GROUP) { throw new Exception("No permission group specified"); } // Get parameters long forumID = ParamUtils.getLongParameter(request,"forum",-1L); long categoryID = ParamUtils.getLongParameter(request,"cat",-1L); int[] permissions = ParamUtils.getIntParameters(request,"permission",-1); int givePermTo = ParamUtils.getIntParameter(request,"givePermTo",-1); boolean add = request.getParameter("add") != null; boolean remove = request.getParameter("remove") != null; String username = ParamUtils.getParameter(request,"username"); String groupname = ParamUtils.getParameter(request,"groupname"); String[] items = request.getParameterValues("items"); int[] itemType = ParamUtils.getIntParameters(request,"itemType",-1); // Further permission checks. Check if we're in "admin" perm editing mode // that a forum admin can't admin global perms: if (permGroup == ADMIN_GROUP && forumID != -1L && !isForumAdmin) { // Forum admins can't administrate global permissions throw new UnauthorizedException("You don't have admin privileges to perform this operation."); } // UserManager for getting and setting users or lists of users UserManager userManager = forumFactory.getUserManager(); // GroupManager for getting and setting groups or list of groups GroupManager groupManager = forumFactory.getGroupManager(); // Load the forum Forum forum = null; if (forumID != -1L) { forum = forumFactory.getForum(forumID); } // Load the category ForumCategory category = null; if (categoryID != -1L) { category = forumFactory.getForumCategory(categoryID); } // Get the permissions manager for the appropriate mode we're in: PermissionsManager permManager = null; if (mode == CAT_MODE) { permManager = category.getPermissionsManager(); } else if (mode == FORUM_MODE) { // The forums permission manager can either be global or local: if (forum == null) { // Since no forum was specified, we'll get the perm manager from // the forum factory so we can edit global permissions: permManager = forumFactory.getPermissionsManager(); } else { permManager = forum.getPermissionsManager(); } } // Create the group of permissions we're going to administer: int[] permGroupDef = null; if (permGroup == CONTENT_GROUP) { if (ATTACHMENTS_ENABLED) { permGroupDef = new int[] { READ_FORUM, CREATE_THREAD, CREATE_MESSAGE, CREATE_ATTACHMENT }; } else { permGroupDef = new int[] { READ_FORUM, CREATE_THREAD, CREATE_MESSAGE }; } } else if (permGroup == ADMIN_GROUP) { if (forum == null) { if (category == null) { permGroupDef = new int[] { SYSTEM_ADMIN, CAT_ADMIN, FORUM_ADMIN, USER_ADMIN, MODERATOR }; } else { permGroupDef = new int[] { CAT_ADMIN, FORUM_ADMIN, USER_ADMIN, MODERATOR }; } } else { permGroupDef = new int[] { FORUM_ADMIN, MODERATOR }; } } // add a new permission if requested if (add) { // Check to see that the user clicked a permission radio button and // selected at least one permission if (givePermTo > 0 && (permissions!=null && permissions.length>0)) { switch (givePermTo) { case ANYBODY: // Add anonymous user permissions for (int i=0; i<permissions.length; i++) { if (permissions[i] == MODERATOR) { permManager.addAnonymousUserPermission(MODERATE_THREADS); permManager.addAnonymousUserPermission(MODERATE_MESSAGES); } else { permManager.addAnonymousUserPermission(permissions[i]); } } break; case REGISTERED: // Add registered user permissions for (int i=0; i<permissions.length; i++) { if (permissions[i] == MODERATOR) { permManager.addRegisteredUserPermission(MODERATE_THREADS); permManager.addRegisteredUserPermission(MODERATE_MESSAGES); } else { permManager.addRegisteredUserPermission(permissions[i]); } } break; case USER: try { // get the user: User user = userManager.getUser(username); // Add the user permission for (int i=0; i<permissions.length; i++) { if (permissions[i] == MODERATOR) { permManager.addUserPermission(user, MODERATE_THREADS); permManager.addUserPermission(user, MODERATE_MESSAGES); } else { permManager.addUserPermission(user, permissions[i]); } } } catch (Exception ignored) {} break; case GROUP: try { // get the user: Group group = groupManager.getGroup(groupname); // Add the user permission for (int i=0; i<permissions.length; i++) { if (permissions[i] == MODERATOR) { permManager.addGroupPermission(group, MODERATE_THREADS); permManager.addGroupPermission(group, MODERATE_MESSAGES); } else { permManager.addGroupPermission(group, permissions[i]); } } } catch (Exception ignored) {} break; default: } } // done adding, so redirect back to this page response.sendRedirect("perms.jsp?forum="+forumID+"&mode="+mode+"&cat=" +categoryID+"&permGroup="+permGroup); return; } // remove a permission if requested if (remove) { // Get the lists of user IDs and group IDs. long[] userIDs = getUserIDs(items); long[] groupIDs = getGroupIDs(items); // if there are user perms or group perms to remove: if (userIDs.length > 0 || groupIDs.length > 0) { // users first, for (int i=0; i<userIDs.length; i++) { if (userIDs[i] == GUEST_ID) { for (int j=0; j<itemType.length; j++) { if (itemType[j] == MODERATOR) { permManager.removeAnonymousUserPermission(MODERATE_THREADS); permManager.removeAnonymousUserPermission(MODERATE_MESSAGES); } else { permManager.removeAnonymousUserPermission(itemType[j]); } } } else if (userIDs[i] == REGISTERED_ID) { for (int j=0; j<itemType.length; j++) { if (itemType[j] == MODERATOR) { permManager.removeRegisteredUserPermission(MODERATE_THREADS); permManager.removeRegisteredUserPermission(MODERATE_MESSAGES); } else { permManager.removeRegisteredUserPermission(itemType[j]); } } } else { try { User user = userManager.getUser(userIDs[i]); for (int j=0; j<itemType.length; j++) { // only remove this permission if: // 1) If the admin tool user is not "user" // 2) and if itemType[j] is not the SYSTEM_ADMIN priv if (pageUser.getID() != user.getID() || itemType[j] != ForumPermissions.SYSTEM_ADMIN) { if (itemType[j] == MODERATOR) { permManager.removeUserPermission(user,MODERATE_THREADS); permManager.removeUserPermission(user,MODERATE_MESSAGES); } else { permManager.removeUserPermission(user,itemType[j]); } } } } catch (Exception ignored) {} } }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?