也谈权限设计

09-04-25 snow0613
    

一直挺喜欢J道的风格,虽然极端,但是极端的可爱,喜欢这边的OO。我一直希望能用纯OO的东西设计出属于自己的一套系统,——当然,我的经验实在不足以完成这样的想法。但是,总得要有行动啊,没有行动只能算是空想,即使能力不够,也要通过实践才能知道需要补充学习哪一方面的知识。于是,就决定从基础模块做起,比方说权限管理。

这个话题属于老生长谈了,随便网上一搜都有一大堆的东西。

看了很多,但多数围绕数据库建表来设计,即使我所在的公司,系统权限这部分的设计也是围绕着数据库来做的。因此数据库的思维限制了在面向对象这方面的拓展,我一直不知道如何下手。希望能得到J道达人的指点。

我讲的权限系统只包括功能权限,数据权限这部分我认为应该属于业务系统范畴。因此我认为应该可以提炼出一套相对容易移植的权限系统。

我打算以RBAC的设计理念来设计。

我们知道,RBAC中的R指的是Resource,也就是资源,如果用数据库方式去做的话,很容易就可以设计出来,一张Resource表(ResourceId,ResourceName,ParentResourceId,TreeRelation),一张Permission表(PermissionId,ResourceId,Permission,PermissionName),一张Role表(RoleId,Role,RoleName),一张Role_Permission表。这种设计很容易就可以想到,但这并不是我想要的。我希望能通过面向对象的方式来设计,也就是说,我们首先应该谈的是Resource类如何设计、Role类如何设计、Permission类如何设计,怎样在类当中体现出它们之间的关系,当然如果只是纯粹的POJO类,我觉得还不如用数据库设计来得直观。

比方说,Role类中是否应该包含这么一个方法:public boolean hasPermission(Permission p);可是由于这方面的知识实在有限,而且有没有可以借鉴的系统。凭空想象,实在很郁闷。

希望能得到各位J道达人的指点!

先谢谢各位了!
[该贴被snow0613于2009-04-25 22:43修改过]

    

snow0613
2009-04-26 20:20

不会吧,没人回?

banq
2009-04-26 20:28

权限体系本站已经讨论非常充分,它属于我们分析设计常提的“知识性层面”和操作性层面,Role就类似那种Personal Type,属于知识层面,而personal是操作层面。

权限现在已经属于通用子域,通用实现了,不必每个系统都来进行专门分析,不再属于核心领域。

snow0613
2009-04-26 22:08

To Banq:
我知道不管是jdon也好还是在其他的技术论坛,权限这部分内容的确是讲的非常详细,我也能够作出来。可是就像你经常说的,用面向过程的思维来使用面向对象的语言,多数均围绕着数据库来进行设计,从本质上讲并没有真正地用OO方式去设计。当然,也许是我找的不够仔细,但我的确没能看到是纯粹从OO的方式去进行设计的。
如,http://www.jdon.com/jivejdon/thread/14629.html

下面这个帖子回复的给我的感觉有点OO了,可是我还是有很多不明白的地方。
http://www.jdon.com/jivejdon/thread/11313.html

我觉得如果从OO出发来说,应该像这个帖子中的lucian回复的那样,先设计这么些接口,但是不知道为什么,总觉得还是有哪些地方怪怪的,受限于经验,暂时无法描述我现在的感觉!