《《用户及权限》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《用户及权限》PPT课件.ppt(51页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、上一次课讲到在Visual FoxPro 6.0中设计程序的Splash界面、设计用户登录界面以及为用户密码加密的方法。请同学们回顾这样两个问题:1.Bitxor函数的格式2.及功能是什么?2.文档界面类型有哪些?函数格式:BITXOR(n1,n2)功能:返回n1,n2两个数值型数值按位进行异或运算的结果。VFP允许创建单文档界面和多文档界面。单文档界面(SDI)由一个或多个独立窗口组成,都在桌面上独立显示。多文档界面(MDI)由单一主窗口组成,应用程序包含在主窗口或浮动在主窗口顶端。上一次课主要学习的内容本章主要介绍用户数据表的设计、权限管理,用户管理。第第4 4章章.用户及权限管理用户及权
2、限管理人力资源管理系统中用户管理使用用户组和用户2个表的双层管理机制,首先通过用户组设置权限,然后将用户归属某个组获取权限。在HRMData数据库中新建“UserGroup”表存放用户组信息;新建“Users”表存放用户信息。表结构如下:4.14.1设计数据表设计数据表 字段名字段名 类型类型 宽度宽度 索引索引 1 组编号 字符型 2 2 组名称 字符型 20 升序 3 基础信息管理 逻辑型 1 4 员工档案管理 逻辑型 1 5 奖励记录管理 逻辑型 1 6 惩罚记录管理 逻辑型 1 7 培训记录管理 逻辑型 1 8 调动记录管理 逻辑型 1 9 考评记录管理 逻辑型 110 用户组管理 逻
3、辑型 11.1.UserGroupUserGroup表结构表结构 字段名字段名 类型类型 宽度宽度11 用户管理 逻辑型 112 奖励记录查询 逻辑型 113 惩罚记录查询 逻辑型 114 培训记录查询 逻辑型 115 调动记录查询 逻辑型 116 考评记录查询 逻辑型 117 员工档案查询 逻辑型 118 用户密码修改 逻辑型 119 培训项目管理 逻辑型 1 字段名字段名 类型类型 宽度宽度 索引索引 NullsNulls1 用户名 字符型 20 升序 是2 密码 字符型 20 是3 姓名 字符型 204 用户组 字符型 2 升序 是2.2.UsersUsers表结构表结构管理用户,可以新
4、增、修改、删除等。4.24.2用户管理表单用户管理表单在项目管理器中新增表单:UserAdmin将users和usergroup表添加到数据环境中,设置表users的属性exclusive=.T.bufferModeOverRide=2-保守式行缓冲在表单中添加控件:1个列表框、4个标签、4个文本框、1个组合框、4个按钮。.创建表单创建表单AutoCenter=.T.BorderStyle=2-固定对话框Caption=部门结构设置Closable=.F.Height=267Width=466Icon=people.icoMDIForm=.T.MaxButton=.F.MinButton=.F
5、.ShowTips=.T.ShowWindow=1-在顶层表单中WindowType=1-模式 Name=userAdminCmdNew.Caption=新增 CmdModify.Caption=修改 .ToolTipText=新增 .ToolTipText=修改CmdExit.Caption=退出 CmdDelete.Caption=删除 .ToolTipText=退出 .ToolTipText=删除 .Cancel=.T.属性设置属性设置-1/2-1/2txt用户名.ControlSource=users.用户名txt密码.PassWordChar=*txt确认密码.PassWordCha
6、r=*txt姓名.ControlSource=users.姓名cbo用户组.controlsource=users.用户组 .rowsourcetype=6-字段 .rowsource=users.组编号,组名称 .style=2-下拉列表框表单自定义属性:OldRecord=0 新增记录前的当前记录formmode=browse 表单状态browse/new/modify表单自定义方法:setmode.属性设置属性设置-2/2-2/2*获取要设置的状态IF THISFORM.FormMode=browseFormMode=.F.ELSEFormMode=.T.ENDIF*控制文本框THISF
7、ORM.SETALL(ReadOnly,!FormMode,TextBox)*控制组合框THISFORM.SETALL(Enabled,FormMode,ComboBox).setmode-1/3setmode-1/3*控制“新增”按钮THISFORM.CmdNew.Enabled=!FormMode*控制“退出”按钮THISFORM.CmdExit.Enabled=!FormMode*更改按钮标题IF!THISFORM.FormMode=browseTHISFORM.CmdModify.Caption=保存THISFORM.CmdDelete.Caption=取消ELSE.setmode-2
8、/3setmode-2/3THISFORM.CmdModify.Caption=修改THISFORM.CmdDelete.Caption=删除ENDIF*如果用户名为“admin”,不能修改其用户名IF THISFORM.UserList.Value=admin;.AND.THISFORM.FormMode!=newTHISFORM.txt用户名.ReadOnly=.T.ENDIF.setmode-3/3setmode-3/3表单的表单的initinit代码代码:*表单进入“浏览”状态THISFORM.FormMode=browseTHISFORM.SetMode*刷新表单THISFORM.R
9、efresh.添加代码添加代码THISFORM.Refresh.列表框列表框userlist.Clickuserlist.Click*保存记录指针的位置SELECT USERSTHISFORM.OldRecord=RECNO()*设置列表框的数据源THISFORM.UserList.ControlSource=THISFORM.UserList.RowSourceType=0THISFORM.UserList.RowSource=.新增新增CmdNew.Click-1/2CmdNew.Click-1/2*新增空白记录APPEND BLANKTHISFORM.UserList.Requery*设
10、置表单状态THISFORM.FormMode=newTHISFORM.SetMode*刷新表单THISFORM.Refresh.新增新增CmdNew.Click-2/2CmdNew.Click-2/2*如果是作为“修改”按钮IF THIS.CAPTION=修改*使表单进入“修改”状态THISFORM.FormMode=ModifyTHISFORM.SetMode*刷新表单THISFORM.RefreshRETURNENDIF*精确比较SET EXACT ON.修改修改CmdModify.Click-1/10CmdModify.Click-1/10*如果是作为“保存”按钮IF THIS.CAPT
11、ION=保存*用户名不能为空IF EMPTY(ALLTRIM(THISFORM.txt用户名.Value)MESSAGEBOX(用户名不能为空,48,人力资源管理系统)THISFORM.txt用户名.SetFocusRETURNENDIF.修改修改CmdModify.Click-2/10CmdModify.Click-2/10*“新增”时密码不能为空IF EMPTY(ALLTRIM(THISFORM.txt密码.Value);.AND.EMPTY(ALLTRIM(THISFORM.txt确认密码.Value);.AND.THISFORM.FormMode!=newMESSAGEBOX(密码不能
12、为空,48,人力资源管理系统)THISFORM.txt密码.SetFocusRETURNENDIF.修改修改CmdModify.Click-3/10CmdModify.Click-3/10*密码与确认密码要一致IF ALLTRIM(THISFORM.txt密码.Value)!=ALLTRIM(THISFORM.txt确认密码.Value)MESSAGEBOX(密码与确认密码不一致,48,人力资源管理系统)THISFORM.txt密码.SetFocusRETURNENDIF.修改修改CmdModify.Click-4/10CmdModify.Click-4/10*姓名不能为空IF EMPTY(A
13、LLTRIM(THISFORM.txt姓名.Value)MESSAGEBOX(姓名不能为空,48,人力资源管理系统)THISFORM.txt姓名.SetFocusRETURNENDIF.修改修改CmdModify.Click-5/10CmdModify.Click-5/10*用户组不能为空IF EMPTY(THISFORM.cbo用户组.Value)MESSAGEBOX(用户组不能为空,48,人力资源管理系统)THISFORM.cbo用户组.SetFocusRETURNENDIF.修改修改CmdModify.Click-6/10CmdModify.Click-6/10*如果用户数据无误YN=M
14、ESSAGEBOX(确认保存,4+32,人力资源管理系统)IF YN=6SELECT UsersIF(TABLEUPDATE(.F.)=.F.)MESSAGEBOX(用户名重复,48,人力资源管理系统)THISFORM.txt用户名.SETFOCUSRETURNENDIF.修改修改CmdModify.Click-7/10CmdModify.Click-7/10*如果密码与确认密码不为空IF.NOT.(EMPTY(ALLTRIM(THISFORM.txt密码.Value);.AND.EMPTY(ALLTRIM(THISFORM.txt确认密码.Value)sPass=Encode(ALLTRIM
15、(THISFORM.txt密码.Value),0)sUName=ALLTRIM(THISFORM.txt用户名.Value)*更新密码UPDATE Users SET 密码=sPass WHERE 用户名=sUNameENDIF.修改修改CmdModify.Click-8/10CmdModify.Click-8/10*设置列表框的数据源THISFORM.UserList.ControlSource=users.用户名THISFORM.UserList.RowSourceType=6THISFORM.UserList.RowSource=users.用户名,姓名.修改修改CmdModify.Cl
16、ick-9/10CmdModify.Click-9/10*表单进入“浏览”状态THISFORM.FormMode=browseTHISFORM.SetModeTHISFORM.UserList.RequeryTHISFORM.RefreshENDIFENDIFTHISFORM.REFRESHSET EXACT OFF.修改修改CmdModify.Click-10/10CmdModify.Click-10/10*如果是作“取消”按钮IF THIS.CAPTION=取消*确认对话框YN=MESSAGEBOX(确定取消修改,4+32,人力资源管理系统)IF YN=6*取消修改SELECT USERS
17、TABLEREVERT(.T.).删除删除CmdDelete.Click-1/6CmdDelete.Click-1/6*回到原记录IF THISFORM.FormMode=newIF THISFORM.OldRecord 0GO THISFORM.OldRecordENDIFENDIF.删除删除CmdDelete.Click-2/6CmdDelete.Click-2/6*设置列表框数据源THISFORM.UserList.ControlSource=users.用户名THISFORM.UserList.RowSourceType=6THISFORM.UserList.RowSource=use
18、rs.用户名,姓名THISFORM.UserList.Requery.删除删除CmdDelete.Click-3/6CmdDelete.Click-3/6*回到“浏览”状态THISFORM.FormMode=browseTHISFORM.SetMode*刷新表单THISFORM.RefreshRETURNENDIFENDIF.删除删除CmdDelete.Click-4/6CmdDelete.Click-4/6*如果是作为“删除”按钮IF THIS.CAPTION=删除*不能删除内置的“admin”用户IF ALLTRIM(THISFORM.txt用户名.Value)=adminMESSAGEB
19、OX(不能删除系统内置管理用户,48,人力资源管理系统)RETURNENDIF*确认对话框.删除删除CmdDelete.Click-5/6CmdDelete.Click-5/6YN=MESSAGEBOX(确认删除用户+ALLTRIM(THISFORM.txt用户名.Value),;4+32,人力资源管理系统)*如果确认IF YN=6*删除用户DELETE FROM USERS WHERE 用户名=ALLTRIM(THISFORM.txt用户名.Value)PACKTHISFORM.UserList.RequeryTHISFORM.RefreshENDIFENDIF.删除删除CmdDelete.
20、Click-6/6CmdDelete.Click-6/6人力资源系统中将权限分为17项。为方便操作,将权限的读取与保存分离。主程序文件main.prg中,定义全局变量数组AuthName17,用于存放权限。4.34.3权限管理权限管理PUBLIC Array AuthName17AuthName1=基础信息管理AuthName2=员工档案管理AuthName3=奖励记录管理AuthName4=惩罚记录管理AuthName5=培训记录管理AuthName6=调动记录管理AuthName7=考评记录管理AuthName8=用户组管理.数组与权限对应关系数组与权限对应关系AuthName9=用户管理
21、AuthName10=奖励记录查询AuthName11=惩罚记录查询AuthName12=培训记录查询AuthName13=考评记录查询AuthName14=调动记录查询AuthName15=员工档案查询AuthName16=用户密码修改AuthName17=培训项目管理在项目中新建程序:ReadAuth,通过函数方式接收用户组编号和权限序号,读取对应权限字符串。程序建立后,通过如下代码可读取编号为01的用户组权限:For I=1 to 17 ReadAuth(01,I)Endfor读取权限*“ReadAuth”函数*读取指定用户组的指定权限FUNCTION ReadAuth(sUGNo,nA
22、uthID)*读取权限名称LOCAL Array AuthName17AuthName1=基础信息管理AuthName2=员工档案管理AuthName3=奖励记录管理AuthName4=惩罚记录管理AuthName5=培训记录管理AuthName6=调动记录管理ReadAuth.prg-1/3ReadAuth.prg-1/3AuthName7=考评记录管理AuthName8=用户组管理AuthName9=用户管理AuthName10=奖励记录查询AuthName11=惩罚记录查询AuthName12=培训记录查询AuthName13=考评记录查询AuthName14=调动记录查询AuthNam
23、e15=员工档案查询AuthName16=用户密码修改AuthName17=培训项目管理ReadAuth.prg-2/3ReadAuth.prg-2/3*读取权限值LOCAL rValue*查找权限值Select UserGroupLOCATE FOR 组编号=sUGNoIF FOUND()*读取权限rValue=&AuthNamenAuthIDENDIFSET FILTER TOReturn rValueENDFUNCReadAuth.prg-3/3ReadAuth.prg-3/3在项目中新建程序:SaveAuth,通过函数方式接收参数“用户组编号,权限序号,权限值”,设置指定用户、指定序号
24、的权限。通过获取表单中与权限对应的控件值,保存到数组,如AuthStatus,然后调用数组中的值更新用户信息表,使用数组AuthStatus和程序SaveAuth保存权限信息的程序段如下:For i=1 to 17 SaveAuth(This.Value,i,AuthStatusi)Endfor4.3.2保存权限*“SaveAuth”函数*设定指定用户组的指定权限FUNCTION SaveAuth(sUGNo,nAuthID,bValue)*读取权限名称LOCAL Array AuthName17AuthName1=基础信息管理AuthName2=员工档案管理AuthName3=奖励记录管理A
25、uthName4=惩罚记录管理AuthName5=培训记录管理AuthName6=调动记录管理SaveAuth.prg-1/3SaveAuth.prg-1/3AuthName7=考评记录管理AuthName8=用户组管理AuthName9=用户管理AuthName10=奖励记录查询AuthName11=惩罚记录查询AuthName12=培训记录查询AuthName13=考评记录查询AuthName14=调动记录查询AuthName15=员工档案查询AuthName16=用户密码修改AuthName17=培训项目管理SaveAuth.prg-2/3SaveAuth.prg-2/3*更新指定用户组
26、的指定权限SELECT UserGroupLOCATE FOR 组编号=sUGNoIF FOUND()REPLACE&AuthNamenAuthID WITH bValueENDIFENDFUNCSaveAuth.prg-3/3SaveAuth.prg-3/3权限控制主要是介绍如何在整个系统中实现权限控制。4.3.34.3.3权限控制权限控制在主程序main.prg中声明全局变量数组GotAuth,系统登录时从usergroup表读取用户所属用户组权限,到系统各表单中根据gotAuth存储的值设置控件状态。系统设置Admin为默认系统管理员,不受权限限制,也不能删除。.1.1权限控制流程权限控
27、制流程主程序main.prg中加入如下代码:Public GotAuth17.2.2主程序设计主程序设计如果系统登录成功后,执行以下代码:.3.3登录处理登录处理IF IS_USER&以下保存登录用户:cUser=ALLTRIM(THISFORM.txt用户名.Value)SELECT UserGroup&查找登录用户的权限LOCATE FOR 组编号=nGroupIF FOUND()FOR i=1 TO 17GotAuthi=ReadAuth(nGroup,i)ENDFORENDIFDO FORM MainForm&调用主界面THISFORM.RELEASE&退出当前表单ELSE&如果登录不正确 在菜单设计器中,每个菜单项项都可以设置选项,即单击菜单列选项钮,打开提示选项对话框,在“跳过”栏输入条件,多为如下格式:not GotAuth1 AND cUser!=admin.4.4菜单设置菜单设置主要介绍了用户数据表的设计、权限管理,用户管理。第第4章小结章小结1.设计权限数据表。2.设计读取权限自定义函数3.设计保存权限自定义函数4.设计用户管理表单5.如何在整个系统中实现权限控制?第第4章思考题章思考题4.设计用户管理表单第第4章作业题章作业题长春大学管理学院会计系冯建祝本章本章结束
限制150内