第4章用户及权限管理.ppt

上传人:本田雅阁 文档编号:2082769 上传时间:2019-02-11 格式:PPT 页数:51 大小:517.51KB
返回 下载 相关 举报
第4章用户及权限管理.ppt_第1页
第1页 / 共51页
第4章用户及权限管理.ppt_第2页
第2页 / 共51页
第4章用户及权限管理.ppt_第3页
第3页 / 共51页
亲,该文档总共51页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第4章用户及权限管理.ppt》由会员分享,可在线阅读,更多相关《第4章用户及权限管理.ppt(51页珍藏版)》请在三一文库上搜索。

1、上一次课讲到在Visual FoxPro 6.0中设计程序的Splash界面、设计用户登录界面以及为用户密码加密的方法。请同学们回顾这样两个问题:,Bitxor函数的格式 及功能是什么?,2.文档界面类型有哪些?,函数格式:BITXOR(n1, n2) 功能:返回n1, n2两个数值型数值按位进行异或运算的结果。,VFP允许创建单文档界面和多文档界面。 单文档界面(SDI)由一个或多个独立窗口组成,都在桌面上独立显示。 多文档界面(MDI)由单一主窗口组成,应用程序包含在主窗口或浮动在主窗口顶端。,上一次课主要学习的内容,本章主要介绍用户数据表的设计、权限管理,用户管理。,第4章.用户及权限管

2、理,人力资源管理系统中用户管理使用用户组和用户2个表的双层管理机制,首先通过用户组设置权限,然后将用户归属某个组获取权限。 在HRMData数据库中新建“UserGroup”表存放用户组信息;新建“Users”表存放用户信息。 表结构如下:,4.1设计数据表, 字段名 类型 宽度 索引 1 组编号 字符型 2 2 组名称 字符型 20 升序 3 基础信息管理 逻辑型 1 4 员工档案管理 逻辑型 1 5 奖励记录管理 逻辑型 1 6 惩罚记录管理 逻辑型 1 7 培训记录管理 逻辑型 1 8 调动记录管理 逻辑型 1 9 考评记录管理 逻辑型 1 10 用户组管理 逻辑型 1,1.UserGr

3、oup表结构, 字段名 类型 宽度 11 用户管理 逻辑型 1 12 奖励记录查询 逻辑型 1 13 惩罚记录查询 逻辑型 1 14 培训记录查询 逻辑型 1 15 调动记录查询 逻辑型 1 16 考评记录查询 逻辑型 1 17 员工档案查询 逻辑型 1 18 用户密码修改 逻辑型 1 19 培训项目管理 逻辑型 1, 字段名 类型 宽度 索引 Nulls 1 用户名 字符型 20 升序 是 2 密码 字符型 20 是 3 姓名 字符型 20 4 用户组 字符型 2 升序 是,2.Users表结构,管理用户,可以新增、修改、删除等。,4.2用户管理表单,在项目管理器中新增表单:UserAdmi

4、n 将users和usergroup表添加到数据环境中,设置表users的属性 exclusive=.T. bufferModeOverRide=2-保守式行缓冲 在表单中添加控件: 1个列表框、4个标签、4个文本框、1个组合框、4个按钮。,.创建表单,AutoCenter=.T. BorderStyle=2-固定对话框 Caption=“部门结构设置“ Closable=.F. Height=267 Width=466 Icon=people.ico MDIForm=.T. MaxButton=.F. MinButton=.F. ShowTips=.T. ShowWindow=1-在顶层表单

5、中 WindowType=1-模式 Name=“userAdmin“ CmdNew.Caption=“新增“ CmdModify.Caption=“修改“ .ToolTipText=“新增“ .ToolTipText=“修改“ CmdExit.Caption=“退出“ CmdDelete.Caption=“删除“ .ToolTipText=“退出“ .ToolTipText=“删除“ .Cancel=.T.,.属性设置-1/2,txt用户名.ControlSource=users.用户名 txt密码.PassWordChar=“*“ txt确认密码.PassWordChar=“*“ txt姓名

6、.ControlSource=users.姓名 cbo用户组.controlsource=users.用户组 .rowsourcetype=6-字段 .rowsource=users.组编号,组名称 .style=2-下拉列表框 表单自定义属性: OldRecord=0 新增记录前的当前记录 formmode=“browse“ 表单状态browse/new/modify 表单自定义方法: setmode,.属性设置-2/2,*获取要设置的状态 IF THISFORM.FormMode = “browse“ FormMode = .F. ELSE FormMode = .T. ENDIF *控制

7、文本框 THISFORM.SETALL(“ReadOnly“, !FormMode, “TextBox“) *控制组合框 THISFORM.SETALL(“Enabled“ , FormMode, “ComboBox“),.setmode-1/3,*控制“新增”按钮 THISFORM.CmdNew.Enabled = !FormMode *控制“退出”按钮 THISFORM.CmdExit.Enabled = !FormMode *更改按钮标题 IF !THISFORM.FormMode = “browse“ THISFORM.CmdModify.Caption = “保存“ THISFORM

8、.CmdDelete.Caption = “取消“ ELSE,.setmode-2/3,THISFORM.CmdModify.Caption = “修改“ THISFORM.CmdDelete.Caption = “删除“ ENDIF *如果用户名为“admin”,不能修改其用户名 IF THISFORM.UserList.Value = “admin“ ; .AND. THISFORM.FormMode != “new“ THISFORM.txt用户名.ReadOnly = .T. ENDIF,.setmode-3/3,表单的init代码: *表单进入“浏览”状态 THISFORM.Form

9、Mode = “browse“ THISFORM.SetMode *刷新表单 THISFORM.Refresh,.添加代码,THISFORM.Refresh,.列表框userlist.Click,*保存记录指针的位置 SELECT USERS THISFORM.OldRecord = RECNO() *设置列表框的数据源 THISFORM.UserList.ControlSource = “ THISFORM.UserList.RowSourceType = 0 THISFORM.UserList.RowSource = “,.新增CmdNew.Click-1/2,*新增空白记录 APPEND

10、 BLANK THISFORM.UserList.Requery *设置表单状态 THISFORM.FormMode = “new“ THISFORM.SetMode *刷新表单 THISFORM.Refresh,.新增CmdNew.Click-2/2,*如果是作为“修改”按钮 IF THIS.CAPTION = “修改“ *使表单进入“修改”状态 THISFORM.FormMode = “Modify“ THISFORM.SetMode *刷新表单 THISFORM.Refresh RETURN ENDIF *精确比较 SET EXACT ON,.修改CmdModify.Click-1/10

11、,*如果是作为“保存”按钮 IF THIS.CAPTION = “保存“ *用户名不能为空 IF EMPTY(ALLTRIM(THISFORM.txt用户名.Value) MESSAGEBOX(“用户名不能为空“, 48, “人力资源管理系统“) THISFORM.txt用户名.SetFocus RETURN ENDIF,.修改CmdModify.Click-2/10,*“新增”时密码不能为空 IF EMPTY(ALLTRIM(THISFORM.txt密码.Value) ; .AND. EMPTY(ALLTRIM(THISFORM.txt确认密码.Value) ; .AND. THISFORM

12、.FormMode != “new“ MESSAGEBOX(“密码不能为空“, 48, “人力资源管理系统“) THISFORM.txt密码.SetFocus RETURN ENDIF,.修改CmdModify.Click-3/10,*密码与确认密码要一致 IF ALLTRIM(THISFORM.txt密码.Value) != ALLTRIM(THISFORM.txt确认密码.Value) MESSAGEBOX(“密码与确认密码不一致“, 48, “人力资源管理系统“) THISFORM.txt密码.SetFocus RETURN ENDIF,.修改CmdModify.Click-4/10,*

13、姓名不能为空 IF EMPTY(ALLTRIM(THISFORM.txt姓名.Value) MESSAGEBOX(“姓名不能为空“, 48, “人力资源管理系统“) THISFORM.txt姓名.SetFocus RETURN ENDIF,.修改CmdModify.Click-5/10,*用户组不能为空 IF EMPTY(THISFORM.cbo用户组.Value) MESSAGEBOX(“用户组不能为空“, 48, “人力资源管理系统“) THISFORM.cbo用户组.SetFocus RETURN ENDIF,.修改CmdModify.Click-6/10,*如果用户数据无误 YN =

14、MESSAGEBOX(“确认保存“, 4+32, “人力资源管理系统“) IF YN =6 SELECT Users IF (TABLEUPDATE(.F.) = .F.) MESSAGEBOX(“用户名重复“, 48, “人力资源管理系统“) THISFORM.txt用户名.SETFOCUS RETURN ENDIF,.修改CmdModify.Click-7/10,*如果密码与确认密码不为空 IF .NOT. (EMPTY(ALLTRIM(THISFORM.txt密码.Value) ; .AND. EMPTY(ALLTRIM(THISFORM.txt确认密码.Value) sPass = E

15、ncode(ALLTRIM(THISFORM.txt密码.Value), 0) sUName = ALLTRIM(THISFORM.txt用户名.Value) *更新密码 UPDATE Users SET 密码 = sPass WHERE 用户名 = sUName ENDIF,.修改CmdModify.Click-8/10,*设置列表框的数据源 THISFORM.UserList.ControlSource = “users.用户名“ THISFORM.UserList.RowSourceType = 6 THISFORM.UserList.RowSource = “users.用户名,姓名“

16、,.修改CmdModify.Click-9/10,*表单进入“浏览”状态 THISFORM.FormMode = “browse“ THISFORM.SetMode THISFORM.UserList.Requery THISFORM.Refresh ENDIF ENDIF THISFORM.REFRESH SET EXACT OFF,.修改CmdModify.Click-10/10,*如果是作“取消”按钮 IF THIS.CAPTION = “取消“ *确认对话框 YN = MESSAGEBOX(“确定取消修改“, 4+32, “人力资源管理系统“) IF YN = 6 *取消修改 SELE

17、CT USERS TABLEREVERT(.T.),.删除CmdDelete.Click-1/6,*回到原记录 IF THISFORM.FormMode = “new“ IF THISFORM.OldRecord 0 GO THISFORM.OldRecord ENDIF ENDIF,.删除CmdDelete.Click-2/6,*设置列表框数据源 THISFORM.UserList.ControlSource = “users.用户名“ THISFORM.UserList.RowSourceType = 6 THISFORM.UserList.RowSource = “users.用户名,姓

18、名“ THISFORM.UserList.Requery,.删除CmdDelete.Click-3/6,*回到“浏览”状态 THISFORM.FormMode = “browse“ THISFORM.SetMode *刷新表单 THISFORM.Refresh RETURN ENDIF ENDIF,.删除CmdDelete.Click-4/6,*如果是作为“删除”按钮 IF THIS.CAPTION = “删除“ *不能删除内置的“admin”用户 IF ALLTRIM(THISFORM.txt用户名.Value) = “admin“ MESSAGEBOX(“不能删除系统内置管理用户“, 48

19、, “人力资源管理系统“) RETURN ENDIF *确认对话框,.删除CmdDelete.Click-5/6,YN = MESSAGEBOX(“确认删除用户“ + “ “ + ALLTRIM(THISFORM.txt用户名.Value), ; 4+32, “人力资源管理系统“) *如果确认 IF YN = 6 *删除用户 DELETE FROM USERS WHERE 用户名 = ALLTRIM(THISFORM.txt用户名.Value) PACK THISFORM.UserList.Requery THISFORM.Refresh ENDIF ENDIF,.删除CmdDelete.Cl

20、ick-6/6,人力资源系统中将权限分为17项。为方便操作,将权限的读取与保存分离。主程序文件main.prg中,定义全局变量数组AuthName17,用于存放权限。,4.3权限管理,PUBLIC Array AuthName17 AuthName1 = “基础信息管理“ AuthName2 = “员工档案管理“ AuthName3 = “奖励记录管理“ AuthName4 = “惩罚记录管理“ AuthName5 = “培训记录管理“ AuthName6 = “调动记录管理“ AuthName7 = “考评记录管理“ AuthName8 = “用户组管理“,.数组与权限对应关系,AuthNa

21、me9 = “用户管理“ AuthName10 = “奖励记录查询“ AuthName11 = “惩罚记录查询“ AuthName12 = “培训记录查询“ AuthName13 = “考评记录查询“ AuthName14 = “调动记录查询“ AuthName15 = “员工档案查询“ AuthName16 = “用户密码修改“ AuthName17 = “培训项目管理“,在项目中新建程序:ReadAuth,通过函数方式接收用户组编号和权限序号,读取对应权限字符串。 程序建立后,通过如下代码可读取编号为01的用户组权限: For I=1 to 17 ReadAuth(“01“,I) Endf

22、or,4.3.1读取权限,*“ReadAuth”函数 *读取指定用户组的指定权限 FUNCTION ReadAuth(sUGNo,nAuthID) *读取权限名称 LOCAL Array AuthName17 AuthName1 = “基础信息管理“ AuthName2 = “员工档案管理“ AuthName3 = “奖励记录管理“ AuthName4 = “惩罚记录管理“ AuthName5 = “培训记录管理“ AuthName6 = “调动记录管理“,ReadAuth.prg-1/3,AuthName7 = “考评记录管理“ AuthName8 = “用户组管理“ AuthName9 =

23、 “用户管理“ AuthName10 = “奖励记录查询“ AuthName11 = “惩罚记录查询“ AuthName12 = “培训记录查询“ AuthName13 = “考评记录查询“ AuthName14 = “调动记录查询“ AuthName15 = “员工档案查询“ AuthName16 = “用户密码修改“ AuthName17 = “培训项目管理“,ReadAuth.prg-2/3,*读取权限值 LOCAL rValue *查找权限值 Select UserGroup LOCATE FOR 组编号 = sUGNo IF FOUND() *读取权限 rValue = &AuthN

24、amenAuthID ENDIF SET FILTER TO Return rValue ENDFUNC,ReadAuth.prg-3/3,在项目中新建程序:SaveAuth,通过函数方式接收参数 “用户组编号,权限序号,权限值”,设置指定用户、指定序号的权限。 通过获取表单中与权限对应的控件值,保存到数组,如AuthStatus,然后调用数组中的值更新用户信息表,使用数组AuthStatus和程序SaveAuth保存权限信息的程序段如下: For i=1 to 17 SaveAuth(This.Value,i,AuthStatusi) Endfor,4.3.2保存权限,*“SaveAuth”

25、函数 *设定指定用户组的指定权限 FUNCTION SaveAuth(sUGNo,nAuthID,bValue) *读取权限名称 LOCAL Array AuthName17 AuthName1 = “基础信息管理“ AuthName2 = “员工档案管理“ AuthName3 = “奖励记录管理“ AuthName4 = “惩罚记录管理“ AuthName5 = “培训记录管理“ AuthName6 = “调动记录管理“,SaveAuth.prg-1/3,AuthName7 = “考评记录管理“ AuthName8 = “用户组管理“ AuthName9 = “用户管理“ AuthName1

26、0 = “奖励记录查询“ AuthName11 = “惩罚记录查询“ AuthName12 = “培训记录查询“ AuthName13 = “考评记录查询“ AuthName14 = “调动记录查询“ AuthName15 = “员工档案查询“ AuthName16 = “用户密码修改“ AuthName17 = “培训项目管理“,SaveAuth.prg-2/3,*更新指定用户组的指定权限 SELECT UserGroup LOCATE FOR 组编号 = sUGNo IF FOUND() REPLACE &AuthNamenAuthID WITH bValue ENDIF ENDFUNC,

27、SaveAuth.prg-3/3,权限控制主要是介绍如何在整个系统中实现权限控制。,4.3.3权限控制,在主程序main.prg中声明全局变量数组GotAuth,系统登录时从usergroup表读取用户所属用户组权限,到系统各表单中根据gotAuth存储的值设置控件状态。系统设置Admin为默认系统管理员,不受权限限制,也不能删除。,.1权限控制流程,主程序main.prg中加入如下代码: Public GotAuth17,.2主程序设计,如果系统登录成功后,执行以下代码:,.3登录处理,IF IS_USER &以下保存登录用户: cUser=ALLTRIM(THISFORM.txt用户名.V

28、alue) SELECT UserGroup &查找登录用户的权限 LOCATE FOR 组编号 = nGroup IF FOUND() FOR i = 1 TO 17 GotAuthi = ReadAuth(nGroup, i) ENDFOR ENDIF DO FORM MainForm &调用主界面 THISFORM.RELEASE &退出当前表单 ELSE &如果登录不正确 ,在菜单设计器中,每个菜单项项都可以设置选项,即单击菜单列选项钮,打开提示选项对话框,在“跳过”栏输入条件,多为如下格式: not GotAuth1 AND cUser != “admin“,.4菜单设置,主要介绍了用户数据表的设计、权限管理,用户管理。,第4章小结,1.设计权限数据表。 2.设计读取权限自定义函数 3.设计保存权限自定义函数 4.设计用户管理表单 5.如何在整个系统中实现权限控制?,第4章思考题,4.设计用户管理表单,第4章作业题,本章结束,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1