首页 > 开发 > 综合 > 正文

一种简单方便的用户权限管理方法--使用菜单来管理用户权限

2024-07-21 02:09:25
字体:
来源:转载
供稿:网友

 
今天刚写完一个权限管理的程序,本来有很多解决方案可以实现,只是当时灵机一现,突然想到用菜单来进行权限分配,因为大部分项目的权限要通过菜单来控制,对于在窗口中要控制的非菜单的控件,控制他们其实也可以用一个隐藏的菜单来对应,这样有不少好处,至少可以在一登陆的时候就把所有权限用菜单的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来判断是否有鼠标右键或其他键盘键按下),也不能遂愿。郁闷了我一天啊!

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

待续!

 
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表