锁定老帖子 主题:关于权限模块设计的一点思考
精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (3)
|
|
---|---|
作者 | 正文 |
发表时间:2008-10-29
Joo 写道 我们现在的做法是采用scope+type字段来判断一种Permission,其中scope代表URL,type可能为url也可能为action.这样同时也定义了权限的划分,方便权限分配时候的操作.其实更好的方法是将所有的permission都作为Action处理,这个等有时间在慢慢细说
期待你详细的解说 |
|
返回顶楼 | |
发表时间: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的架构设计比起来就像玩具一样,太粗糙了.看了人家的设计和代码,很被折服了一把. 唉... |
|
返回顶楼 | |
发表时间:2008-10-29
接着回答楼主的两个问题
1,一个url中有多个处理内容要分别设计权限,你可以用Spring Security利用AOP完成的方法拦截,配合异常过滤器,就可以很漂亮地用一个提示页面来告诉用户"老兄,你捞过界了" 2,页面中按钮控制 方案一:让这个按钮按权限决定是否显示,这个可以使用Spring Security的JspTag,或者你自己开发其他模板语言的宏(我就需要开发velocity宏,谁让因为官方不提供来着) 方案二:在这个按钮执行后从服务端进行AOP拦截.也就是1中提到的 其实我自己的应用中还有苦恼事,就是想让url能被用户自定义,于是必须用数据库来存储url和role的对应关系,恩,还要接着看是否能扩展SS2.应该是很容易的,因为我大概知道Spring是如何解析http配置的,呵呵. |
|
返回顶楼 | |
发表时间:2008-10-29
权限的分配一般是:
user:具体的用户 role:权限角色 menu:功能菜单 一般给role分配menu 给user分配role 如果user分配了某个role,哪么他就具有role所分配的menu权限 一个role可以分配多个menu 一个user可以分配多个role,哪么他具有更多个role的menu权限 |
|
返回顶楼 | |
发表时间:2008-10-29
接楼上的,以上的权限其实可以定义为静态权限,但是在实际使用中还有些动态权限的分配问题,比如,某个输入域A可以填写和更改,B只可以看,而C不可见,这样的权限如何分配?
本人的初步设计思路是通过配置文件或数据库来存储这些动态权限,用户可以自由定义,然后每次打开页面就根据配置动态生成相应的HTML页面。 但是具体的实现却存在移植后这些动态权限管理会失控,比如A项目中的某些注册的序号和B项目的序号重合,而将B项目中的某些模块移植到A时,就出现这种情况。 |
|
返回顶楼 | |
发表时间:2008-10-29
thinkhlin 写道 接楼上的,以上的权限其实可以定义为静态权限,但是在实际使用中还有些动态权限的分配问题,比如,某个输入域A可以填写和更改,B只可以看,而C不可见,这样的权限如何分配?
本人的初步设计思路是通过配置文件或数据库来存储这些动态权限,用户可以自由定义,然后每次打开页面就根据配置动态生成相应的HTML页面。 但是具体的实现却存在移植后这些动态权限管理会失控,比如A项目中的某些注册的序号和B项目的序号重合,而将B项目中的某些模块移植到A时,就出现这种情况。 这也只是相对动态的权限,实际上还是静态权限,只是一个如何绑定的问题.这种权限在每个项目中所存在的地方都不一样,所以还没有方法能够通用到直接把权限移植到另一个项目中,因为权限所作用的资源都还没建立起来. 对于一般的权限,直接在作用点拦截最简单了,做太复杂了也麻烦,逻辑容易乱. |
|
返回顶楼 | |
发表时间:2008-10-29
这么说吧 页面是一个层次 还有页面上得按钮是一个层次
访问页面用拦截器拦截.jsp 按钮拦截.do之类得 |
|
返回顶楼 | |
发表时间: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肯定是我的不二之选 |
|
返回顶楼 | |
发表时间:2008-10-30
marsjin 写道 权限的分配一般是:
user:具体的用户 role:权限角色 menu:功能菜单 一般给role分配menu 给user分配role 如果user分配了某个role,哪么他就具有role所分配的menu权限 一个role可以分配多个menu 一个user可以分配多个role,哪么他具有更多个role的menu权限 这个已经是初始时的设计了; 建议你看看 RBAC 模型 |
|
返回顶楼 | |
发表时间:2008-10-30
页面上的每个按钮,对应的不也是url么
|
|
返回顶楼 | |