前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用户权限升级到组权限,看完这篇大呼这也太简单了。

用户权限升级到组权限,看完这篇大呼这也太简单了。

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

环境: VFP9 SP2 7423+祺佑三层开发框架(猫框)

一、过一下大脑

在上篇基于用户的权限设置中,这次我加入组的概念,把所有组的权限规划好之后,以后添加用户只需要赋于所属组就行了,不需要一个一个权限再去设置。

界面设计如下:

用户列表多加一列,Header=所属组

增加了组合框QiyuCombobox1控件

组和用户在一个表名,用一个类型字段(u_lx 逻辑型,组=.T. 用户=.F.)区别。

用户可以设置所属组,但组不可以选择所属组。

用户选择组之后,不可以再对权限列表编辑,只可查看。

二、数据表结构改动

user_pass 增加一个u_lx 逻辑型 默认0= 用户,roleid 组id 整型,默认值0(没有所属组)。

三、业务代码编写

表单Load事件

在原有的代码上做一点变动

利用自联接查询,获取用户和组展现,

修改user_pass的查询语句如下,增加缓冲表设置

代码语言:javascript
复制
Set Multilocks On
*--用户列表
TEXT TO lcSQLCmd noshow
select a1.u_name,isnull(b1.u_name,'') rolename,a1.roleid,a1.id,u_lx
 from user_pass a1 left join
(select id,u_name from user_pass where u_lx=1) b1
 on a1.roleid=b1.id
ENDTEXT
oDBSQLhelper=Newobject("MSSQLHelper","MSSQLHelper.prg")
If oDBSQLhelper.SQLQuery(lcSQLCmd,"user_pass")<0
    Messagebox(oDBSQLhelper.errmsg)
    Return .F.
Endif
CursorSetProp("Buffering",5,"user_pass")  &&设置为表缓冲

获取角色(组)列表

为方便选择,我们追加了一个空的选项

代码语言:javascript
复制
*--角色列表
TEXT TO lcSQLCmd NOSHOW textm
SELECT 0 id,'' rolename
union all
SELECT id,u_name rolename FROM user_pass WHERE u_lx=1
ENDTEXT
If oDBSQLhelper.SQLQuery(lcSQLCmd,"rolelist")<0
    Messagebox(oDBSQLhelper.errmsg)
    Return .F.
Endif

Qiyu_combobox1组合框设置

Qiyu_combobox1组合框的Refresh事件

代码语言:javascript
复制
This.Visible=!user_pass.u_lx  &&如果是组,组合框隐藏掉

Qiyu_combobox1组合框的Valid事件

代码语言:javascript
复制
*--将组合框选中的组名回写用户列表(user_pass)
Replace rolename With rolelist.rolename,roleid With rolelist.Id In user_pass
Thisform.Refresh()

Qiyu_grid_sort2权限列表的refresh事件

代码语言:javascript
复制
*--用户没有所属组,可以编辑权限列表,否则只读
If user_pass.roleid==0 
    If Inlist(Thisform.Opcode,1,2)
        This.ReadOnly=.F.
        This.column3.Enabled=.T.
    Else
        This.ReadOnly=.T.
        This.column3.Enabled=.F.
    Endif
ELSE 
   This.ReadOnly=.T.  
   This.column3.Enabled=.F.
Endif

撤消按钮Qiyu_cmdcancel1按钮click事件

代码语言:javascript
复制
Tablerevert(.T.,"user_pass")
Thisform.Oca.Undo()
Thisform.Opcode=0
Thisform.qiyu_grid_sort2.Refresh()

保存按钮Qiyu_cmdsave1按钮click事件,增加了更新用户表(user_pass)的roleid字段

代码语言:javascript
复制
Tableupdate(1,.T.,"user_pass") &&保存缓冲表
*--与dal_ca共享链接
oDBSQLhelper=Newobject("MSSQLHelper","MSSQLHelper.prg","",Thisform.Oca.Datasource)
TEXT TO lcSQLCmd NOSHOW TEXTMERGE
UPDATE user_pass SET roleid = ?user_pass.roleid WHERE id=?user_pass.id
ENDTEXT
If oDBSQLhelper.ExecuteSQL(lcSQLCmd)<0
    Messagebox(Thisform.Oca.msg)  &&显示错误信息
    Return
Endif

这样就完成了从用户到组权限的升级,而前端用户获取菜单权限也非常简单,

判定用户的roleid不为空,就使用roleid加载权限,否则使用id来加载权限。

来个动图

思考题:

如果用户设置了所属组,权限列表展现这个组的权限,而不是用户的原来的权限,又该如何做呢?

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

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

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

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

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