`
herryhaixiao
  • 浏览: 90267 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

jforum 二次开发 权限系统

阅读更多
最近的项目用到了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的论坛还是比较简单的。
引用:http://cid-5d1295892cb8e3ee.spaces.live.com/blog/cns!5D1295892CB8E3EE!340.trak

分享到:
评论
1 楼 guhan010 2012-12-17  
博主你好,我现在在研究jforum,能否与你交流一下,QQ:2151636,拜托。

相关推荐

    jforum二次开发 详解 BBS开源安装

    【JForum二次开发详解:BBS开源安装】 JForum是一款基于Java语言的开源论坛系统,以其高度可定制性、稳定性及强大的社区功能受到广大开发者喜爱。对于那些希望根据自身需求进行定制化的用户,JForum提供了丰富的二...

    Jforum二次开发成果

    《Jforum二次开发详解——构建个性化论坛系统》 Jforum,作为一个开源的Java论坛系统,以其优秀的性能和灵活的可扩展性受到了众多开发者和社区管理员的青睐。在Jforum 2.1.8的基础上进行二次开发,可以进一步满足...

    jforum2论坛源码

    "jforum2源码可二次开发"意味着对于有Java开发经验的人来说,可以修改源代码以满足特定需求,比如添加新功能、优化性能或者修复已知问题。二次开发是开源软件的一大优势,它鼓励社区成员贡献自己的代码,共同提升...

    jforum功能说明

    Jforum的核心优势在于其代码结构清晰,遵循BSD授权,这意味着用户在使用和进行二次开发时不必担心版权问题,使其成为论坛系统二次开发的理想选择。 Jforum采用自有的MVC(Model-View-Controller)框架,虽然初学者...

    JForum3 完整项目

    这个项目包含的是从版本控制系统Subversion(SVN)中导出的完整源代码,未经任何修改,因此用户可以深入研究其内部机制,进行二次开发或者学习Java Web应用的构建。 **JForum3核心特性** 1. **多语言支持**:...

    利用JForum创建论坛

    它以其强大的功能、优雅的界面以及清晰的代码结构,成为二次开发的理想选择。JForum基于BSD授权,这意味着在使用过程中不必担心版权问题。该论坛采用自有的MVC框架,初次接触可能需要适应,但一旦熟悉,就能方便地...

    jforum-2.1.8-编译代码.zip

    在这个"jforum-2.1.8-编译代码.zip"压缩包中,包含了JForum 2.1.8版本的源代码,对于开发者来说,这是一个深入理解JForum工作原理、进行二次开发或定制化改造的宝贵资源。 首先,让我们了解JForum的基本架构。...

    jforum开源论坛

    由于JForum是开源的,开发者可以深入研究源码,了解其工作原理,并进行二次开发。这包括但不限于添加新功能、优化性能、调整界面样式等。JForum的源码结构清晰,注释丰富,对于Java初学者来说,也是一个很好的学习...

    jforum开源的论坛文档

    - 对于简单需求可以直接利用现有的API接口进行二次开发; - 复杂功能建议参考插件开发文档,通过创建插件的方式来实现。 #### 六、总结 jForum作为一款成熟稳定的开源论坛软件,在国内外拥有大量忠实用户群体。...

    基于java的论坛系统 JForum.zip

    在压缩包"rafaelsteil-jforum3-f4814b8"中,包含了JForum的源代码和相关资源文件,这使得用户和开发者可以深入研究其内部工作原理,进行二次开发或者定制化需求。对于想要学习Java Web开发或者熟悉论坛系统架构的人...

    jforum-2.1.8.zip

    《JForum 2.1.8 Web工程深度...同时,JForum的开源特性鼓励开发者进行二次开发,以满足特定的业务场景。对于Java Web开发者而言,深入理解和掌握JForum的架构与技术,无疑能提升自身在社区建设和管理方面的专业能力。

    jforum-2.1.8-src.zip

    此外,JForum的源代码开放,允许开发者进行二次开发,定制化自己的论坛系统。 6. **安全与性能** JForum重视安全性,提供了防止SQL注入、XSS攻击等安全措施。同时,通过优化数据库查询和缓存策略,提升了系统的...

    JForum-2.1.4.rar_JForum-2.1.4_java 论坛源码_jforum_论坛源码_论坛网站源码

    源码开放意味着你可以深入研究其内部结构,学习优秀的编程实践,或者根据自己的需求进行二次开发。在部署方面,JForum 可以运行在任何支持Java的Web服务器上,如Tomcat、Jetty等,与数据库如MySQL、PostgreSQL等配合...

    开源BBS--JForum 源码

    本文将深入解析JForum的源码,帮助你了解其架构设计、核心模块以及如何进行二次开发。 首先,JForum采用了MVC(Model-View-Controller)设计模式,这是Web应用程序开发中的经典架构。模型负责处理业务逻辑,视图...

    jforum-2.1.4-src.zip

    源码的开放性使得开发者可以针对特定需求进行二次开发,比如增加新的插件或修改界面样式,以满足不同用户群体的需求。 在数据库支持方面,JForum展现了其强大的兼容性。它支持多种主流的数据库管理系统,如MySQL、...

    Java论坛系统 JForum

    **Java论坛系统 JForum** Java论坛系统 JForum 是一个基于Java技术开发的开源社区平台,专为用户提供在线讨论、信息共享...其源代码的开放性允许开发者根据需求进行定制和二次开发,进一步满足不同场景下的使用需求。

    java论坛源码jar包

    这得益于其开放源码的特性,用户可以根据实际需求进行二次开发,满足个性化需求。 4. **数据库支持**:JForum支持多种关系型数据库,包括MySQL、PostgreSQL、Oracle等,这为不同规模的网站提供了灵活的数据存储选择...

    Java开源BBS源码推荐:打造高质量论坛社区!.zip

    这些项目不仅提供了完整的论坛功能,还支持二次开发和自定义,以满足不同需求。其中,JForum以其轻量级、高性能和易于扩展的特点,受到了广泛的欢迎。它采用MVC(Model-View-Controller)架构,使得代码结构清晰,...

Global site tag (gtag.js) - Google Analytics