C/S模式根据权限基于反射机制实现动态生成菜单
2006-01-10 13:27
786 查看
有了一些MIS的开发经验,也用笨方法实现了根据不同用户、不同角色、不同权限分配不同菜单的功能,但总觉得那还不是自己想要的。因为那时有进度约束着的,为了赶工而投机取巧了罢了。
实现方法是这样的:
1、数据库中设计了用户表、用户角色表、角色权限表、角色基本表和菜单结构表,不同的用户可分配不同的角色,不同的角色分配不同的权限。
2、在主程序中加好菜单并建立了两个数组,一个字符型的(存储菜单名),一个布尔型的(存储菜单状态),二者等长。第一个数组的元素跟菜单结构表中的菜单名一一对应,第二个数组的元素全是false。
在主程序的Load事件里面加入代码:
int i = 0;
menuItem1.Visible = menuStates[i];//menuStates就是第二个数组
menuItem1.Enabled = menuStates[i++];//如果只设置菜单项不可见,菜单的快捷键还是能响应的
……
注意:此处menuItem一定要和实际的菜单一一对应。
3、在权限设置模块实现给用户分配角色,给角色分配权限既菜单。在给角色分配权限时其实是把菜单结构表中菜单名分配给角色,加到角色权限表中。角色的权限是一串字符,就是菜单结构表中的菜单名累加起来(中间加上特定的分隔字符,相同要进行约减)。
4、用户登录的时候就直接在主程序中取用户的角色,再根据角色取权限,再把权限串加到一起,就得到这个用户的所有权限。然后将权限串按照分割符分开成数组,再将分割后的数组与2中第一个数组中元素一一进行比较,如果相同就将对应位置的菜单状态数组元素设为true。这要在2中代码之前处理。
这样,菜单的动态显示就能实现了
![](http://www.cnblogs.com/Emoticons/emsmilep.gif)
![](http://www.cnblogs.com/Emoticons/emidea.gif)
最近又看了一些关于动态菜单的文章,其中大多是讲用XML实现的,也有提到反射的,恍然发现我之前的方法确是微不足道的,所以还想做些这方面的研究。经过一个晚上的努力,终于实现了一个“XML+反射”的动态菜单,把菜单的功能单独做到一个dll,然后动态添加到主程序,增加新的功能只需要重新生成一个dll,然后再XML文件中配置,不需要重新安装主程序。但是权限还是没有去做,因为我开始感到迷茫,这样做是否合理、是否高效?动态生成菜单有没有更好的解决方案呢?
实现方法是这样的:
1、数据库中设计了用户表、用户角色表、角色权限表、角色基本表和菜单结构表,不同的用户可分配不同的角色,不同的角色分配不同的权限。
2、在主程序中加好菜单并建立了两个数组,一个字符型的(存储菜单名),一个布尔型的(存储菜单状态),二者等长。第一个数组的元素跟菜单结构表中的菜单名一一对应,第二个数组的元素全是false。
在主程序的Load事件里面加入代码:
int i = 0;
menuItem1.Visible = menuStates[i];//menuStates就是第二个数组
menuItem1.Enabled = menuStates[i++];//如果只设置菜单项不可见,菜单的快捷键还是能响应的
……
注意:此处menuItem一定要和实际的菜单一一对应。
3、在权限设置模块实现给用户分配角色,给角色分配权限既菜单。在给角色分配权限时其实是把菜单结构表中菜单名分配给角色,加到角色权限表中。角色的权限是一串字符,就是菜单结构表中的菜单名累加起来(中间加上特定的分隔字符,相同要进行约减)。
4、用户登录的时候就直接在主程序中取用户的角色,再根据角色取权限,再把权限串加到一起,就得到这个用户的所有权限。然后将权限串按照分割符分开成数组,再将分割后的数组与2中第一个数组中元素一一进行比较,如果相同就将对应位置的菜单状态数组元素设为true。这要在2中代码之前处理。
这样,菜单的动态显示就能实现了
![](http://www.cnblogs.com/Emoticons/emsmilep.gif)
![](http://www.cnblogs.com/Emoticons/emidea.gif)
最近又看了一些关于动态菜单的文章,其中大多是讲用XML实现的,也有提到反射的,恍然发现我之前的方法确是微不足道的,所以还想做些这方面的研究。经过一个晚上的努力,终于实现了一个“XML+反射”的动态菜单,把菜单的功能单独做到一个dll,然后动态添加到主程序,增加新的功能只需要重新生成一个dll,然后再XML文件中配置,不需要重新安装主程序。但是权限还是没有去做,因为我开始感到迷茫,这样做是否合理、是否高效?动态生成菜单有没有更好的解决方案呢?
相关文章推荐
- 根据权限动态加载数据库菜单的DevExpressNavBar导航栏的实现
- 框架 day54 BOS项目练习(权限/角色/用户管理(CRUD),基于数据库实现动态授权,ehcache缓存权限,shiro标签,菜单权限展示)
- 基于 RBAC 简单实现动态菜单及权限管理
- 动态创建菜单,menustrip,根据权限显示菜单,控制菜单可用,反射,给窗体传值,反射对象传值,public static Object CreateInstance ( Type type, pa
- BOS项目练习(权限/角色/用户管理(CRUD),基于数据库实现动态授权,ehcache缓存权限,shiro标签,菜单权限展示)
- [转载内容]动态创建菜单,menustrip,根据权限显示菜单,控制菜单可用,反射,给窗体传值,反射对象传值,public static Object CreateInstance ( Type type, params Object[] args )
- 页面根据XML里权限动态生成菜单
- 动态创建菜单,menustrip,根据权限显示菜单,控制菜单可用,反射,给窗体传值,反射对象传值,public static Object CreateInstance ( Type type, params Object[] args )
- 动态创建菜单,menustrip,根据权限显示菜单,控制菜单可用,反射,给窗体传值,反射对象传值【转】
- vue addRoutes实现动态权限路由菜单的示例
- SpringBoot整合mybatis、shiro、redis实现基于数据库的细粒度动态权限管理系统实例
- 基于灰度世界、完美反射、动态阈值等图像自动白平衡算法的原理、实现及效果
- 类加载机制与反射5——使用反射生成JDK动态代理
- asp.net根据条件动态生成GridView,并动态绑定列,且可对其进行编辑的实现
- SpringBoot整合mybatis、shiro、redis实现基于数据库的细粒度动态权限管理系统实例
- winform:C# WinForm中实现基于角色的权限菜单
- 模拟实现Struts拦截器-蕴含着代理模式,AOP,工厂模式,依赖注入,Java 反射,动态构造等机制
- 基于Hadoop SLA认证机制实现权限控制
- 分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility (续3篇-导出时动态生成多Sheet EXCEL)
- 【权限的思考】(一)使用反射实现动态权限