论坛首页 Java企业应用论坛

关于权限模块设计的一点思考

浏览 34265 次
精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (3)
作者 正文
   发表时间:2008-10-29  
Joo 写道
我们现在的做法是采用scope+type字段来判断一种Permission,其中scope代表URL,type可能为url也可能为action.这样同时也定义了权限的划分,方便权限分配时候的操作.其实更好的方法是将所有的permission都作为Action处理,这个等有时间在慢慢细说

期待你详细的解说
0 请登录后投票
   发表时间:2008-10-29  
andy54321 写道
jander 写道
看看spring security, 它都给你解决了。
虽然有点繁琐。

不是有点繁琐,是非常繁琐,感觉太庞大了;
其实在解决方法上,我在进行spring security / jsecurity 之间的抉择,
前者过于庞大繁琐,后者刚刚加入apache,好多东西都没完善呢,当前文档、demo相当缺乏;

如果说Acegi庞大繁琐那是实话,说Spring  Security 2.0繁琐那我不能苟同.
以我的经验,Security 2.0已经非常简洁了.接口设计优雅,,默认值合理,用来开发其实非常快.
我们以前是用过滤器做的URL权限控制,最近我改成了Spring Security实现,
写了十几行配置,再实现一个接口,再看看它的几个jsptag,登录和权限就都集成了,也不需要修改原来数据库结构.即便以后把用户信息改成LDAP实现,或者增加方法级别的安全设置,看手册那也是很easy的.

推荐看<<Spring in action>>第二版,在网上有公开章节的,其中含有Spring Security的相关内容,可能是地球上写得最好的教材了.(我本来照着官方网页的step by step入手的,弄了一天也没明白,嘿嘿.)
从这本书着手看,半天就能看懂,一天就能架起来.

我写过的URL控制性质的权限系统和Spring Security 2的架构设计比起来就像玩具一样,太粗糙了.看了人家的设计和代码,很被折服了一把.
唉...
0 请登录后投票
   发表时间:2008-10-29  
接着回答楼主的两个问题
1,一个url中有多个处理内容要分别设计权限,你可以用Spring Security利用AOP完成的方法拦截,配合异常过滤器,就可以很漂亮地用一个提示页面来告诉用户"老兄,你捞过界了"

2,页面中按钮控制
方案一:让这个按钮按权限决定是否显示,这个可以使用Spring Security的JspTag,或者你自己开发其他模板语言的宏(我就需要开发velocity宏,谁让因为官方不提供来着)
方案二:在这个按钮执行后从服务端进行AOP拦截.也就是1中提到的

其实我自己的应用中还有苦恼事,就是想让url能被用户自定义,于是必须用数据库来存储url和role的对应关系,恩,还要接着看是否能扩展SS2.应该是很容易的,因为我大概知道Spring是如何解析http配置的,呵呵.
0 请登录后投票
   发表时间:2008-10-29  
权限的分配一般是:
user:具体的用户
role:权限角色
menu:功能菜单

一般给role分配menu

给user分配role

如果user分配了某个role,哪么他就具有role所分配的menu权限

一个role可以分配多个menu
一个user可以分配多个role,哪么他具有更多个role的menu权限

0 请登录后投票
   发表时间:2008-10-29  
接楼上的,以上的权限其实可以定义为静态权限,但是在实际使用中还有些动态权限的分配问题,比如,某个输入域A可以填写和更改,B只可以看,而C不可见,这样的权限如何分配?
本人的初步设计思路是通过配置文件或数据库来存储这些动态权限,用户可以自由定义,然后每次打开页面就根据配置动态生成相应的HTML页面。
但是具体的实现却存在移植后这些动态权限管理会失控,比如A项目中的某些注册的序号和B项目的序号重合,而将B项目中的某些模块移植到A时,就出现这种情况。
0 请登录后投票
   发表时间:2008-10-29  
thinkhlin 写道
接楼上的,以上的权限其实可以定义为静态权限,但是在实际使用中还有些动态权限的分配问题,比如,某个输入域A可以填写和更改,B只可以看,而C不可见,这样的权限如何分配?
本人的初步设计思路是通过配置文件或数据库来存储这些动态权限,用户可以自由定义,然后每次打开页面就根据配置动态生成相应的HTML页面。
但是具体的实现却存在移植后这些动态权限管理会失控,比如A项目中的某些注册的序号和B项目的序号重合,而将B项目中的某些模块移植到A时,就出现这种情况。

这也只是相对动态的权限,实际上还是静态权限,只是一个如何绑定的问题.这种权限在每个项目中所存在的地方都不一样,所以还没有方法能够通用到直接把权限移植到另一个项目中,因为权限所作用的资源都还没建立起来.
对于一般的权限,直接在作用点拦截最简单了,做太复杂了也麻烦,逻辑容易乱.
0 请登录后投票
   发表时间:2008-10-29  
这么说吧  页面是一个层次 还有页面上得按钮是一个层次
访问页面用拦截器拦截.jsp
按钮拦截.do之类得
0 请登录后投票
   发表时间:2008-10-30  
tedeyang 写道

如果说Acegi庞大繁琐那是实话,说Spring  Security 2.0繁琐那我不能苟同.
以我的经验,Security 2.0已经非常简洁了.接口设计优雅,,默认值合理,用来开发其实非常快.
我们以前是用过滤器做的URL权限控制,最近我改成了Spring Security实现,
写了十几行配置,再实现一个接口,再看看它的几个jsptag,登录和权限就都集成了,也不需要修改原来数据库结构.即便以后把用户信息改成LDAP实现,或者增加方法级别的安全设置,看手册那也是很easy的.

推荐看<<Spring in action>>第二版,在网上有公开章节的,其中含有Spring Security的相关内容,可能是地球上写得最好的教材了.(我本来照着官方网页的step by step入手的,弄了一天也没明白,嘿嘿.)
从这本书着手看,半天就能看懂,一天就能架起来.

我写过的URL控制性质的权限系统和Spring Security 2的架构设计比起来就像玩具一样,太粗糙了.看了人家的设计和代码,很被折服了一把.
唉...

很感谢tedeyang;
在开始设计这个权限系统前,我就在比照spring security 、jsecurity之间的优劣,功能上肯定是spring security更强了,看acegi那么多的关注度就知道了;jsecurity是一个新的权限处理,在07年8月加入apache旗下;按jsecurity的说法,前者是重量级的,后者是轻量级的;
本来是想着用spring security的,就像你说得,上它的官网,找到user guide,跟着它的step by step,一步步坐下去,真的是头有些大了,搞了一天,于是想罢了,这个的入门代价也太大。。。。
现在看你说的,应该我是有些误解,马上去看看《spring in action 2》,如果真如你所说的化,spring security肯定是我的不二之选
0 请登录后投票
   发表时间:2008-10-30  
marsjin 写道
权限的分配一般是:
user:具体的用户
role:权限角色
menu:功能菜单

一般给role分配menu

给user分配role

如果user分配了某个role,哪么他就具有role所分配的menu权限

一个role可以分配多个menu
一个user可以分配多个role,哪么他具有更多个role的menu权限


这个已经是初始时的设计了;
建议你看看 RBAC 模型
0 请登录后投票
   发表时间:2008-10-30  
页面上的每个按钮,对应的不也是url么
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics