最近的项目用到了jforum,是把jforum作为一个子系统,但是jforum并不适合作为组件使用,于是就研究了下jorum的权限管理机制。
刚刚看到jforum的ER图还真有点奇怪,从ER图上看,jforum是使用group和role来管理权限,但是只有gorup和user有关联关系,
竟然和forum没有关联关系,后来才明白是在jforum_role_values这张表里,把forumId作为role_value字段保存了,估计设计者
也是为了简少表之间的外键关联关系。
jforum里对权限分得很细,大体有一下几种:
Jforum 权限对应表
perm_administration$single 是否为越级管理员
perm_category 限制的分类
perm_forum 限制的版块
perm_anonymous_post 禁止匿名用户发帖
perm_reply_only 禁止发主体帖,允许回复帖子
perm_create_sticky_announcement_topics$single 允许将主题设置为公告或置顶主题
perm_create_poll$single 可发起投票帖
perm_vote$single 允许投票
perm_read_only_forums 只读版块.选择允许所有表示禁止标签,也就是可回复。
perm_reply_without_moderation 选择 '允许全部'将不限制对所有版块的回复,选中指定的版块代表不允许在选择的版本中回复信息.
perm_html_disabled 选中的版块代表不允许使用HTML标签 .选择‘允许所有’代表允许所有版面使用HTML标签
perm_karma_enabled$single 使用文章评分
perm_bookmarks_enabled$single 允许使用书签
perm_attachments_enabled 是否允许使用附件,选择'允许全部'代表可以使用,选择指定版块代表不允许在选中的版块中使用附件
perm_attachments_download 允许下载附件
perm_moderation_log$single 可以查阅管理活动日志
perm_full_moderation_log$single 可以查阅完整的管理活动日志
perm_moderation$single 是否允许设置为版主
perm_moderation_approve_messages$single 是否在允许的版块里审核/封锁贴子
perm_moderation_forums 不能修改的论坛
perm_moderation_post_remove$single 删除贴子
perm_moderation_post_edit$single 修改贴子
perm_moderation_topic_move$single 移动贴子
perm_moderation_topic_lockUnlock$single 锁定和解锁主题
以上都定义在SecurityConstants中,全部权限其实可以大体分为三部分,管理员,游客,会员。
通过不同的组合可以定义不同的group,不过最终的权限(role),只能分配给gorup,然后把用户加入不同的group来获得role.
(在jforum的管理界面看到group有层次关系,可以有parent,也激动了下,难道group的role也可以继承?后来实验了下发现并没有
这样的机制~。~ 不过一个用户可以属于不同的gorup,role是全部gorup的合集,通过这个还是可以做些文章的 ^.^ )
jforum并没有为二次开发提供比较好的文档和API只有读源代码了,jforum并没有使用流行的MVC框架,似乎是自己实现了一个~后台使用的
是JDBC,所以想要进行二次开发还是得花点力气的。但是jforum的代码比较好读,处处都有封装,虽然注释不多,看懂代码还是比较简单的。
下面终结些权限控制可以用的方法,jforum并没有提供API,很多好用的方法在action里面都是private的,所以最好自己可以写个类,
这样使用起来比较方便:
添加一个权限:
GroupAction >>
添加权限控制为group控制 permissionsSave
GroupSecurityDAO gmodel = DataAccessDriver.getInstance().newGroupSecurityDAO(); (提示使用gorup管理,看来以后还有扩展)
PermissionControl pc = new PermissionControl();
pc.setSecurityModel(gmodel);
PermissionProcessHelper
Role role = new Role();
role.setName(paramName);
this.pc.addRole(this.groupId, role, roleValues); 》》》 pc = PermissionControl
this.addRole(pc, SecurityConstants.PERM_FORUM, f.getId(), groups); >> Forumaction (推荐用这个比较方便)
roleValues 是forum id, 可以访问的话就加上。(注意这里和管理界面上的概念是相反的,界面上选中的是禁止,而在DB中存在这个字段就表允许)
添加一个组:
GroupAction >> insertSave
把一个人加入某一个群组:
UserAction 》》 groupsSave
GenericUserDAO 》》 addToGroup
添加一个Forum:
ForumAction >> insertSave
this.logNewRegisteredUserIn(userId, u ); // add the user info to session
private void addManagerRoleForGroup(Forum f, PermissionControl pc,
int[] gorupIds) {
this.addRole(pc, SecurityConstants.PERM_MODERATION_LOG, f.getId(), gorupIds);
this.addRole(pc, SecurityConstants.PERM_FULL_MODERATION_LOG, f.getId(), gorupIds);
this.addRole(pc, SecurityConstants.PERM_MODERATION, f.getId(), gorupIds);
this.addRole(pc, SecurityConstants.PERM_MODERATION_APPROVE_MESSAGES, f.getId(), gorupIds);
this.addRole(pc, SecurityConstants.PERM_MODERATION_POST_REMOVE, f.getId(), gorupIds);
this.addRole(pc, SecurityConstants.PERM_MODERATION_POST_EDIT, f.getId(), gorupIds);
this.addRole(pc, SecurityConstants.PERM_MODERATION_TOPIC_MOVE, f.getId(), gorupIds);
this.addRole(pc, SecurityConstants.PERM_MODERATION_TOPIC_LOCK_UNLOCK, f.getId(), gorupIds);
//------manager role
}
private void addNormalRoleForGroup(Forum f, PermissionControl pc,
int[] gorupIds) {
this.addRole(pc, SecurityConstants.PERM_ANONYMOUS_POST, f.getId(), gorupIds);
this.addRole(pc, SecurityConstants.PERM_REPLY_ONLY, f.getId(), gorupIds);
this.addRole(pc, SecurityConstants.PERM_CREATE_STICKY_ANNOUNCEMENT_TOPICS, f.getId(), gorupIds);
this.addRole(pc, SecurityConstants.PERM_CREATE_POLL, f.getId(), gorupIds);
this.addRole(pc, SecurityConstants.PERM_VOTE, f.getId(), gorupIds);
this.addRole(pc, SecurityConstants.PERM_BOOKMARKS_ENABLED, f.getId(), gorupIds);
this.addRole(pc, SecurityConstants.PERM_ATTACHMENTS_ENABLED, f.getId(), gorupIds);
this.addRole(pc, SecurityConstants.PERM_ATTACHMENTS_DOWNLOAD, f.getId(), gorupIds);
this.addRole(pc, SecurityConstants.PERM_ATTACHMENTS_DOWNLOAD, f.getId(), gorupIds);
}
在jforum的论坛看到作者正在为jforum3努力,期待jforum3啊~~ 现在最新的jforum2.1.8功能相比一些PHP的论坛还是比较简单的。
相关推荐
JForum作为一款现代BBS系统,包含用户注册、登录、发帖、回帖、私信、用户权限管理、版块管理等多个模块。这些模块相互协作,构建了一个完整的在线交流环境。 **4. 安装与部署** 下载JForum的压缩包后,首先需要...
**Java论坛系统 JForum** Java论坛系统 JForum 是一个基于Java技术开发的开源讨论平台,专为构建在线社区和互动论坛而设计。JForum以其高效、稳定和可扩展性著称,采用MVC(Model-View-Controller)架构模式,支持...
Jforum是一款基于Java语言开发的开源论坛系统,其强大的功能和灵活性使其在互联网社区建设中受到广泛欢迎。数据库架构是任何Web应用程序的核心部分,对于Jforum论坛而言也不例外。一个良好的数据库架构设计能够确保...
Jforum拥有完善的权限管理系统,允许管理员设置不同的用户组权限,比如发帖权限、查看特定板块的权限等。这涉及到角色(Role)、权限(Permission)和用户组(Group)的概念,通过这些机制,Jforum能确保社区的秩序...
JForum的权限控制系统如果设计不当,可能会出现权限绕过的情况。攻击者可能通过伪造身份、操纵会话或利用其他漏洞,获得不应有的访问权限,例如管理员权限。 6. **防范措施** 对于开发者来说,预防漏洞的关键在于...
Jforum是一款基于Java技术的开源论坛系统,以其高效、安全和可扩展性受到开发者们的青睐。这个压缩包文件包含了关于Jforum的多个重要知识点,包括配置、初始化流程、处理请求的MVC架构、数据库访问实现、文件监控、...
JForum3是一款基于Java开发的开源论坛系统,其核心设计目标是提供一个高效、稳定且功能丰富的在线讨论平台。这款论坛软件使用了Java语言编写,遵循开放源代码的原则,允许用户自由地使用、修改和分发。JForum3是...
JForum是一款基于Java开发的开源论坛系统,它以其高效、稳定和易于扩展的特点在开源社区中受到广泛欢迎。对于想要深入了解FreeMarker模板引擎的开发者来说,JForum的源码是一个绝佳的学习资源。本篇文章将深入探讨...
通过深入研究Jforum的源代码,开发者可以了解到Java Web应用的开发模式,包括MVC架构、ORM框架的使用(如Hibernate)、国际化处理、权限控制等方面的知识。同时,这也是学习和理解Web论坛系统设计与实现的一个宝贵...
JForum3 是一个基于Java开发的开源论坛系统,提供了丰富的社区交流功能。这个项目包含的是从版本控制系统Subversion(SVN)中导出的完整源代码,未经任何修改,因此用户可以深入研究其内部机制,进行二次开发或者...
【JForum论坛创建详解】 JForum是一款知名的开源论坛软件,具备多语言支持,包括简体中文,虽然管理界面并未完全汉化。它以其强大的功能、优雅的界面以及清晰的代码结构,成为二次开发的理想选择。JForum基于BSD...
JForum3可能提供了API接口,允许与其他系统进行集成,如社交媒体登录、第三方统计分析等。 通过研究JForum3的源代码,开发者不仅可以学习到Java Web开发的最佳实践,还能掌握如何构建一个健壮、易扩展的社区平台。...
10. **安全性与权限**:在实际部署中,确保对JForum进行了适当的权限和安全配置,以防止未授权访问和潜在的安全漏洞。 11. **测试与调试**:部署后,进行功能测试以确保所有部分正常工作。如果遇到问题,可以查看...
《JForum 2.1.8:开源Java论坛系统详解》 JForum是基于Java的开源论坛系统,其2.1.8版本以其强大的功能、灵活性和社区支持而备受青睐。这个版本包含了完整的源代码,使得开发者能够深入理解其工作原理,并可以根据...
标题"jforum2论坛源码"表明了我们关注的是一个名为jforum2的开源论坛系统的源代码。jforum2是一个基于Java技术的讨论板平台,允许用户进行互动交流,提供社区建设和管理功能。源码通常包含程序的所有原始代码,可供...
Jforum是一款知名的开源论坛系统,它以其多语言支持、强大的功能以及美观的界面赢得了用户的青睐。这款论坛系统不仅包含了简体中文,还支持多种其他语言,为全球用户提供方便的交流环境。Jforum的核心优势在于其代码...
JForum是一款开源的、基于Java技术构建的网络论坛系统,它提供了丰富的社区交流功能,如主题发布、回复、用户管理、权限控制等。JForum的设计目标是提供一个高效、易用且可高度定制的论坛解决方案。它的核心特性包括...
JForum是一款开源的、基于Java技术的论坛系统,以其高度可定制性和稳定性在互联网上广受欢迎。本文将详细介绍如何进行JForum的安装过程,包括环境准备、源码获取、编译及部署等步骤,旨在帮助初次接触JForum的开发者...