论坛是这样划分的,用户划分基本确定,包括:普通会员、版主、总版主、坛主
但在角色和功能上有点困惑
首先功能包括:浏览、发布、修改、删除、屏弊文章、精华文章、置顶文章、总置顶文章、论坛置顶文章
如果单是这样的话,角色倒是容易划分,给每个用户按功能划分即可
例如普通会员的角色有:浏览、发布功能;版主有浏览、发布、修改功能……但问题是现在除了功能点外还有版块啊?例如浏览权限,用户在一些特殊的版块不可以浏览;再例如修改删除权限:
1.普通会员只可以修改、删除个人的文章;
2.版主除了可以修改删除个人文章外,还可以修改、删除其所在版块的文章;
3.总版主除了修改删除个人文章外,还可以修改、删除其下所有版块的文章;我初步是这样想的,在创建新版块时,使其与功能点合并做为功能关联到角色中,如新建一版块AA,这样再新建一组功能点:AA浏览、AA发布、AA修改、AA删除、AA屏弊文章、AA精华文章、AA置顶文章、AA总置顶文章、AA论坛置顶文章
想想又不太合适,版块是变动的,我不能每加一个版块就给用户重新添加一个角色还有,其实版块还有属性的,例如:普通版块、正规版块、认证版块
普通版块:所有会员、访客都可浏览
正规版块:只有登录后方可浏览
认证版块:只有版主以上级别可浏览
晕了,这样浏览又与不同属性的权块挂钩了,我该怎样设置这个角色?大家进来聊一聊了,各抒己见吧:)

解决方案 »

  1.   

    把所有的权限都列出来,权限的数量应该是定死的吧 然后一层层的设置
    一开始全设置为false;
    然后,比方登陆了就把正规版块设置为true,管理员再把其他的设置true,不过又很多都是在上一个为true的基础上的,还是用表的连接吧
      

  2.   

    顺便说下, 我目前也正在做个论坛系统, 是毕业设计...我是参考JForum, BBSCS来做, 采用Spring2 + Hibernate3 + Struts2架构有空多交流交流...
      

  3.   

    to:For_suzhen(不懂装懂)
      我不太理解你的思路,我本来是想把正规版块的浏览权限做为一个功能点纳入角色中,然后访客不给他提供这个角色,只能登录用户给他提供这个角色
      但问题是,如果这样,功能点就变成浏览普通版块、浏览正规版块、浏览认证版块;然后添加、修改、删除是不是也要依次按版块的属性来设置功能点?to:jk88811(你的就是我的,我的还是我的~!) 
      下过天忆社区,但看不懂,我的QQ:308616828to:veryfatman(很胖的胖子)
      CSDN是怎样设计的?说来听听?
      

  4.   

    我还没有用过Spring2 , Hibernate3这些呢,学习
      

  5.   

    首先用户组有个级别字段,数值型的,确定是普通用户还是版主之类的.此外用户组里有功能字段,规定哪些功能可用. 这是一级策略.此外版面里有一个针对各用户组的记录,记录里有功能字段.同样规定哪些功能可用及不可用.这又是一级策略.如果只有用户策略就用用户策略,两个策略都有的话就看你自己的偏好进行取舍了.依次上溯.具体可以参考DVBBS
      

  6.   

    to:b2b160() 
      你提到的用户组的概念挺好,我得仔细琢磨一下,先谢了:)
      

  7.   

    但问题是现在除了功能点外还有版块啊?例如浏览权限,用户在一些特殊的版块不可以浏览;再例如修改删除权限:
    1.普通会员只可以修改、删除个人的文章;
    2.版主除了可以修改删除个人文章外,还可以修改、删除其所在版块的文章;
    3.总版主除了修改删除个人文章外,还可以修改、删除其下所有版块的文章-----------------------------------------------------------------------这样细节的权限问题可以在页面内用if/else来处理~例如当前用户是普通用户,
    你在列出该用户浏览的文章,遇到“删除”这一操作字段时,
    先判断这篇文章是不是该用户的,如果是就给他列出“删除”选项,
    如果不是他的,“删除”这一选项就不列出来,因此该用户也就不能删除别人的文章
    ~~~~~
    其他角色都可以类似实现这些功能~这种设计思想虽然不够好,因为这样设计把一些逻辑放到了表现层,
    这是MVC不提倡的,但实现起来还是没问题的~
      

  8.   

    to:daniel_kaka(卡卡)
      你的方法实现起来的确没有问题,我以前都是这样做的;但现在做这个论坛主要是想在技术上和设计上提高一下:)谢谢参与  to:yjscdb() 
      你的方法也得琢磨一下:)
      

  9.   

    呵呵,你想在技术上提高其实也不难~其实web应用程序本身就提供了安全机制:
    在web.xml你可以通过配置
    <security-constraint>
    <login-config>
    <security-role>
    来实现安全管理
    在你的页面中,用
    <logic:present>
    <logic:notPresent>
    标记来动态显示或隐藏你的组件(链接、按钮、菜单等等)
    因为这两个标签中有个role属性可个跟你的角色关联起来~
    这种方法的具体实现你可以参考Struts的相关资料~
      

  10.   

    to:daniel_kaka(卡卡) 
      噢?还真是第一次听说web.xml中可以配置登录和角色的管理,看来我得关注一下了:)
    thank you
      

  11.   

    系统的安全访问控制一般是通过用户认证和用户权限管理来实现。权限管理可简单表述为:判断“Who对What(Which)进行How的操作”的逻辑表达式是否为真。访问控制 (Access Control)是通过某种途径显式地准许或限制访问能力及范围的一种方法。通过访问控制服务,可以限制对关键资源的访问,防止非法用户的侵入或者因合法用户的不慎操作所造成的破坏。各类应用系统的整个体系结构上要设计一个安全可靠、配置灵活、易扩展的安全控制模块,它主要有两部分内容:用户认证和用户权限管理。目前大致有三种安全模型:访问矩阵、基于角色的访问控制(RBAC-Role based access control)模型和多级模型。其中基于角色的访问控制模型由于其较传统的访问控制控制加了一层角色增加了灵活性,因此得到了日益广泛的应用。RBAC是目前公认的解决大型企业的统一资源访问控制的有效方法。其显著的两大特征是:一是减小授权管理的复杂性,降低管理开销;二是灵活地支持企业的安全策略,并对企业的变化有很大的伸缩性。
      

  12.   

    基于角色的访问控制(RBAC-Role based access control)模型
    属于这个领域的范畴!
    你可以到网上找下!
      

  13.   

    4.2.1 同一用户在不同版面的角色激活问题
    由于一个用户可能有很多不同的角色,如果要考虑所有的角色都被激活,这对判断该用户所拥有哪些权限的时候造成了很多的麻烦。例如用户User1在A区内是站长,在B区内是会员,在C区内是过客的情况,如果此时该用户需要对B区内的某个资源进行删除操作,在判断用户是否拥有该权限时,只需要激活用户在B区面的角色,而没有必要激活其他的角色。如果激活其他角色,只会使逻辑更加复杂,即使不考虑实现的复杂度,系统性能也会因此而下降。根据这个具体的业务需求,可以根据RBAC模型中的最小权限原则,只对用户分配必需的权限,即在同一时刻只激活必需的最少的角色。所谓最小权限原则是指:用户所拥有的权力不能超过他执行工作时所需的权限。实现最小权限原则,需分清用户的工作内容,确定执行该项工作的最小权限集,然后将用户限制在这些权限范围之内。在RBAC中,可以根据组织内的规章制度、职员的分工等设计拥有不同权限的角色,只有角色需要执行的操作才授权给角色。当一个主体准备访问某资源时,如果该操作不在主体当前被激活角色的授权操作之内,该访问将被拒绝。
    如上所述,可以得出结论,用户在某个版面进行操作时,只激活该用户在该版面的所有角色即可。
      

  14.   

    在web.xml中配置管理权限属于容器管理安全服务的机制;
    如果你感觉程序用起来不是很方便的话,
    还可以用另外的方式-用应用程序管理安全机制~
    常用的方式有以下两种:
    1,扩展RequestProcesser,重写他的processRoles()方法;
    2,使用filter,自己配置roles;但无论哪种方法,在jsp页面中都要使用
    <logic:present>
    <logic:notPresent>
    的role属性来动态显示或隐藏你的组件(链接、按钮、菜单等等)
      

  15.   

    to:jicken_woo(黑夜里你留下的轮廓,指引我-------不寂寞---------------) 
        例如用户User1在A区内是站长,在B区内是会员,在C区内是过客的情况,如果此时该用户需要对B区内的某个资源进行删除操作,在判断用户是否拥有该权限时,只需要激活用户在B区面的角色,而没有必要激活其他的角色。
    ============================
    你的这段话感觉很有道理,但又有些看不懂,你所谓的激活是指什么?用户所拥有的权限一般都是管理员规定死的,按照你的说法,感觉用户的权限或所拥有的角色是动态的?
    激活是什么意思?
      

  16.   

    to:b2b160() 
        昨天想了半天,用户组的概念和我原来想划分的角色好象差不多
        原来我是想把普通会员、版主、总版主、坛主做为角色,付给他们相应的功能(权限);昨天想划出个用户组,想了半天也无非就是按普通会员、版主、总版主、坛主划分用户组,还请指点一下:)
      

  17.   

    例如:
    用户组:游客,会员,版主,总版主,坛主
    论坛功能:浏览,发贴,编辑,删除,管理.
    版面:A,B,C数据库
    User表里是各用户资料,里面有个GroupID代表的是所属用户组.
    UserGroup放的是用户组记录,里面有个功能字段,可以用文本,采用,1,2,3,4,5,代表具有浏览,发贴,编辑,删除,管理功能.版面表Board放的是版面内容,版主信息,
    版面功能组,里面有GroupID表示设置的用户组,BoardID表示要设置的版面.如果这里没记录就用UserGroup的设置,否则就用此处设置.这里同样有个功能字段.记录该用户组在此版面所具备功能.
    所以要怎么设置权限都可以了.