最近有些网友看了jive论坛中的增加用户权限的cache的一些处理过程觉得很迷惑,现将其做一个总结。 jive论坛的权限是分几个级别的:匿名用户,注册用户,具体的用户。匿名用户和注册用户都代表一类的人,而具体的用户则代表注册用户本身,其权限范围上是注册用户的权限包含匿名用户的权限,具体用户的权限包含注册用户的权限。 在jive的权限缓存中,论坛ID等于-1时代表所有论坛的公共权限即全局权限,用户ID等于-1时代表是匿名用户,0时统指注册用户,具体的用户则用其userID表示。 jive增加用户权限时会判断增加的是全局的权限还是某一个论坛的权限,当要添加新用户的权限时,如果该用户为匿名用户或者是注册用户就要删除掉缓存里的所有用户的权限信息,很多人对这点存有疑问, 首先当增加用户的权限时,要在缓存中把对应有改动的用户权限删除,这样在下次用户验证权限时,系统就会从数据库中获取最新的权限信息并放到缓存中,匿名的用户和注册的用户的权限改变了,那所有具体用户的权限也必定跟着改变,因为具体用户的权限是包括匿名用户和注册用户的权限的. 如果增加的是用户组的权限就会把相应论坛的权限的Cache全部的删除, 下面这段是权限管理DbPermissionManager添加用户权限的方法addUserPermission(long userID, int permissionType)中的一段代码: if (forumID == -1) { if (userID == -1 || userID == 0) { factory.cacheManager.userPermsCache.clear(); } else { factory.cacheManager.userPermsCache.removeUserPerm(userID); } } //Otherwise, it's just per forum. else { if (userID == -1 || userID == 0) { LongCache permsCache = factory.cacheManager.userPermsCache.get(forumID); //If cache is turned on, the cache shouldn't be null. if (permsCache != null) { permsCache.clear(); } } else { factory.cacheManager.userPermsCache.removeUserPerm(userID, forumID); } }