数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
一种简单方便的用户权限管理方法--使用菜单来管理用户权限

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

 

今天刚写完一个权限管理的程序,本来有很多解决方案可以实现,只是当时灵机一现,突然想到用菜单来进行权限分配,因为大部分项目的权限要通过菜单来控制,对于在窗口中要控制的非菜单的控件,控制他们其实也可以用一个隐藏的菜单来对应,这样有不少好处,至少可以在一登陆的时候就把所有权限用菜单的ENABLED为TRUE和FALSE来处理,以后,在需要判断权限时,取权限对应菜单的ENABLED一看便知,不用去数据库里取了!用菜单来进行权限分配的一大好处就是直观,所见即所得,通过点选菜单,使菜单项的CHECDED为TRUE即表示拥有该权限了。为FALSE即为不拥有该权限。这样的方式,我认为编程比较简单,比用TREEVIEW来的简单,尤其PB6。5的TREEVIEW还不带复选框,用TREEVIEW来分配权限也是不方便,用数据窗口形式,或则列表框都可以实现,不过我还是自以为用菜单来分配方便简单,于是决定要这样做了!不敢独享,放在这里,也算是对所以帮助过我的网友致谢!

设计思想:

前提:

权限是按菜单来分配的,一个菜单项对应是一个权限,窗口中要控制的非菜单控件通过隐性菜单项来体现到菜单上,保证一个菜单项对应一个权限。

1,从数据库表里取到用户组(角色或者用户,都一样处理)所具有的权限

2根据这些权限设置菜单,将相应菜单项的CHECKED=TRUE(有权限)

3。用户在菜单上进行权限设置,要设有权限即设置相应菜单的CHECKED属性为真

反之,则假

4确定用户的选择,遍历菜单将每个菜单项与用户组权限表比较,如果用户权限表里有的权限而在对应菜单里CHECKED=FALSE,则删去此权限,为TRUE则不处理,如果用户权限表中没有的权限而在对应菜单里CHECKED=TRUE,则增加此权限,为FALSE则不处理。

效果图如下

 

在每个菜单项的CLICKED事件里写

this.checked=not this.checked

 

在做这个程序的时候,碰见一个最大的问题就是,在点选菜单时,一点击左键菜单就不展开了,要为下一个权限点选的时候,又要重新点开菜单,这样是很麻烦的。所以我想要是在点开菜单的同时,可以点选很多子项菜单,这样就可以只需要展开一次菜单,然后可以给多个子菜单项进行权限设置了。

这可是个大问题啊,问了很多高人。子定义可视类不能以菜单为基类。又不能给菜单定义用户事件来映射到WINDOW消息上。而且菜单只有CLICKED和SELECTED两个事件,菜单调用CLICKED事件后会自动变成不展开状态,SELECTED事件里又不能用KEYDOWN函数来判断是否点击了鼠标右键或着键盘按下了某个键,在这个事件里去触发窗口里自定义事件(这个事件里放了KEYDOWN来判断是否有鼠标右键或其他键盘键按下),也不能遂愿。郁闷了我一天啊!

今天手写累了,先到这,要是大家觉得放在这不会玷污大家的眼睛的话,我会尽快努力把下文写完的,

待续!

 




相关文章

相关软件