首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >只需22行代码,加载菜单权限不要太简单

只需22行代码,加载菜单权限不要太简单

作者头像
加菲猫的VFP
发布2021-08-16 15:07:08
发布2021-08-16 15:07:08
5710
举报
文章被收录于专栏:加菲猫的VFP加菲猫的VFP

在VFP制作的菜单中,有一个属性叫跳过(skip),可以利用它来实现菜单的开闭。

我们来做一个最简单的菜单权限设计:

需设计数据表:用户表,菜单表,用户菜单权限表

一、用户表的设计

二、菜单表和菜单的设计如下图:

菜单description相当于菜单设计器的提示(菜单名),但可以多个菜单名对应一个description。

三、权限表的设计

我们用一个SQL语句来查看用户id=1 的菜单权限的设置情况

代码语言:javascript
复制
select description,isnull(enabled,0) enabled,userid from rights left join  
(SELECT a1.userid,right_id, enabled FROM RoleRight
 inner join  
(
select  id userid from user_pass where USER_PASS.id=1
) a1
on RoleRight.userid=a1.userid
)  b1  on Rights.id=right_id

查询结果如下

用了左连接是因为菜单表以后随时会增加,这样查询就会将新增加的菜单项的设置项也全部展现出来,防止出现找不到权限的情况。

四、菜单权限的加载

表单的LOAD事件加载如下代码

代码语言:javascript
复制
TEXT TO lcSQLCmd NOSHOW TEXTMERGE
select description,isnull(enabled,0) enabled,userid from rights left join  
(SELECT a1.userid,right_id, enabled FROM RoleRight
 inner join  
(
select  id userid from user_pass where USER_PASS.id=1
) a1
on RoleRight.userid=a1.userid
)  b1  on Rights.id=right_id
ENDTEXT
oDBSQLhelper=Newobject("MSSQLHelper","MSSQLHelper.prg")
If oDBSQLhelper.SQLQuery(lcSQLCmd,"main_menus")<0
    Messagebox(oDBSQLhelper.errrmsg)
    Return .F.
Endif
*--表变成对象(表的纵向记录变成了横向属性,*--方便菜单权限控制,简单高效)Select main_menus
oMenus=Createobject("empty")
Scan
    AddProperty(oMenus,Alltrim(description),enabled)
Endscan
AddProperty(_screen,"oMenus",oMenus)  &&将属性添到_screen

这里面用的技巧就是表的纵向记录变成对象的横向属性,从而很方便地设置跳过(skip)属性。

也就是用户权限表中 description.enabeld=.t. 即开启,=.f.即关闭

这样菜单权限就开发完成了,代码量极少,简单高效。

目前是针对一个一个用户来设置权限,当然我们也可以引用角色或组的概念,以后人员增加设置权限的工作量就会减少非常多。角色或组的引入,请期待下篇更新。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-02-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 加菲猫的VFP 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档