大家来讨论一下Acegi的Web权限部分怎么设计需求说明:控制动态系统菜单, 控制页面按钮权限, 角色30个左右?
大家来讨论一下Acegi的Web权限部分怎么设计
需求说明:控制动态系统菜单, 控制页面按钮权限, 角色30个左右? 用户300左右。 菜单100个以上。 页面800个以上.
授权操作人员为客户。
由于客户不会有很多的专业知识,所以授权要比较的方便。
我的想法是做成下面的样子:(见图)
资源表的设计有以下几个字段:主键、 资源Code、 资源名、父资源ID、? 资源Url、?? 资源Type、?? 扩展Url .
其中资源Type有: 菜单类型 跟 其他资源类型? (等扩展).?
?资源是树形结构。 其他资源类型必须跟在菜单类型下面。
授权的时候 菜单类型的对应图中的树型节点(粗体). 其他资源类型的对应树中的小体部分
动态菜单实现。?? 根据权限即 用户角色? 取出 有权限?菜单类型 的资源 组成菜单树。
页面按钮权限。? 标签实现。 标签绑定 其他资源类型 的资源 的?code.? 根据用户角色 即授权判断是否显示。
在菜单中不体现的页面的权限控制:? 根据扩展Url字段.? 在新增资源的时候, 一个资源可以绑定很多的扩展Url .。? 这些Url 被授予对应资源一样的权限(需要有一样的角色才能访问)。 (由于这个URL授权客户不太可能清楚? 所以采用绑定的方式)。怎么绑定法呢? 一个菜单对应的页面 可能有很多链接 可以链接到别的页面 这些页面不再菜单体现? 又要控制权限就采取绑定这个菜单的方式。 按钮也可以绑定扩展Url,应为按钮点击以后可以进入到一些新的页面。 防止直接输入URL的方法进入。
?
不知道大家有没有过这种需求, 希望我讲的大家能听懂? 谢谢。 大家给点意见
1 楼 lighter 2007-05-31 可以看一下白衣在springside权限控制方面做的工作
感觉还可以
ps:acegi的配置文件实在多了一些.... 2 楼 wumingsx 2007-06-04 你的树形状菜单用什么做的,struts_menu? 3 楼 daitiejian 2007-06-04 wumingsx 写道你的树形状菜单用什么做的,struts_menu?
自己写标签。 struts_menu没用过 4 楼 sg552 2007-06-04 我最近正在做LZ说的东西。
用Acegi实现动态的权限管理。使用hibernate. 我们是建立了 Url n:n Role 1:1 User 三个POJO。
现在已经实现,正在使用。
不过问题多多。主要是设计的思路与Acegi的思路不一样。
Acegi的思路应该是,url都是固定的。角色从一开始就不是通过前台来控制的。
现在把Acegi改的面目全非,系统用起来,URL与权限纷繁复杂,甚至修改Acegi的人员都不知道新的权限分配怎么用。
在JDON看到某前辈说:见到的设计的好的系统,都是技术上不复杂的。虽然,但是最近对这句话真是深有体会!
5 楼 sg552 2007-06-04 动态的权限分配,是我上两个星期,前前后后的调试加到一起,大概60个小时吧。
而且是别人设计好,我只负责代码的实现。(所以到现在我对我弄的东西也有点雾水)
说一下现在我们系统遇到的麻烦:
1. url不规范。
如: cm/post.view 对应管理员
cm/list.view 对应一般用户,
那么这里使用Acegi的URL授权就很不好写。
2. 由于使用了动态的URL授权,所以每个URL都要给每个角色授权一下。很墨迹。例如Acegi本来的配置,应该是这样:
/admin/** 对应 admin
/** 对应 anonymous
现在我们的系统要这样:
/admin/** 对应 admin
/** 对应 admin
/** 对应 anonymous
哎。现在3个角色, 32个URL, 弄的动态配置的POJO就好多数据。
3. 有时候会出现莫名其妙的问题。可能是修改了 Acegi的塬代码,也有可能是Acegi与Hibernate的配合出了问题?更有可能是我们对Acegi与Hibernate理解的都不深刻? 有时候会莫名其妙的Access Denied, 有时候又莫名其妙的好了。 不知道怎么回事。还有的时候,对URL记录的读的顺序有要求。晕啊。
最后一点意见: 对Acegi的使用,我的建议是:
1. 按照Acegi的官方意见,在Demo的基础上改
2. 不要使用动态权限的思想。这个在一开始程序设计上就要避免
3. url 在一开始就要有合适的命名。如 /admin/** 一定对应admin角色, 等等。
说的不好,欢迎各位朋友指点!