ImageVerifierCode 换一换
格式:DOCX , 页数:9 ,大小:19.30KB ,
资源ID:5484567      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5484567.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(权限管理delphi.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

权限管理delphi.docx

1、权限管理delphi权限管理delphi 因为做过的一些系统的权限管理的功能虽然在逐步完善,但总有些不尽人意的地方,总想抽个时间来更好的思考一下权限系统的设计。 权限系统一直以来是我们应用系统不可缺少的一个部分,若每个应用系统都重新对系统的权限进行设计,以满足不同系统用户的需求,将会浪费我们不少宝贵时间,所以花时间来设计一个相对通用的权限系统是很有意义的。 二设计目标 设计一个灵活、通用、方便的权限管理系统。 在这个系统中,我们需要对系统的所有资源进行权限控制,那么系统中的资源包括哪些呢?我们可以把这些资源简单概括为静态资源(功能操作、数据列)和动态资源(数据),也分别称为对象资源和数据资源,

2、后者是我们在系统设计与实现中的叫法。 系统的目标就是对应用系统的所有对象资源和数据资源进行权限控制,比如应用系统的功能菜单、各个界面的按钮、数据显示的列以及各种行级数据进行权限的操控。 三相关对象及其关系 大概理清了一下权限系统的相关概念,如下所示: 1. 权限 系统的所有权限信息。权限具有上下级关系,是一个树状的结构。下面来看一个例子 系统管理 用户管理 查看用户 新增用户 修改用户 删除用户 对于上面的每个权限,又存在两种情况,一个是只是可访问,另一种是可授权,例如对于“查看用户”这个权限,如果用户只被授予“可访问”,那么他就不能将他所具有的这个权限分配给其他人。 2. 用户 应用系统的具

3、体操作者,用户可以自己拥有权限信息,可以归属于0n个角色,可属于0n个组。他的权限集是自身具有的权限、所属的各角色具有的权限、所属的各组具有的权限的合集。它与权限、角色、组之间的关系都是n对n的关系。 3. 角色 为了对许多拥有相似权限的用户进行分类管理,定义了角色的概念,例如系统管理员、管理员、用户、访客等角色。角色具有上下级关系,可以形成树状视图,父级角色的权限是自身及它的所有子角色的权限的综合。父级角色的用户、父级角色的组同理可推。 4. 组 为了更好地管理用户,对用户进行分组归类,简称为用户分组。组也具有上下级关系,可以形成树状视图。在实际情况中,我们知道,组也可以具有自己的角色信息、

4、权限信息。这让我想到我们的QQ用户群,一个群可以有多个用户,一个用户也可以加入多个群。每个群具有自己的权限信息。例如查看群共享。QQ群也可以具有自己的角色信息,例如普通群、高级群等。 针对上面提出的四种类型的对象,让我们通过图来看看他们之间的关系。 有上图中可以看出,这四者的关系很复杂,而实际的情况比这个图还要复杂,权限、角色、组都具有上下级关系,权限管理是应用系统中比较棘手的问题,要设计一个通用的权限管理系统,工作量也着实不小。 当然对于有些项目,权限问题并不是那么复杂。有的只需要牵涉到权限和用户两种类型的对象,只需要给用户分配权限即可。 在另一些情况中,引入了角色对象,例如基于角色的权限系

5、统, 只需要给角色分配权限,用户都隶属于角色,不需要单独为用户分配角色信息。 理清了对象关系之后,让我们接着来进行数据库的设计。在数据库建模时,对于N对N的关系,一般需要加入一个关联表来表示关联的两者的关系。初步估计一下,本系统至少需要十张表,分 别为:权限表、用户表、角色表、组表、用户权限关联表、用户角色关联表、角色权限关联表、组权限关联表、组角色关联表、用户属组关联表。当然还可能引出一些相关的表。下面让我们在 PowerDesigner中画出各表吧。 各表及其关系如下: 1. 用户表 用户表(TUser) 字段名称 记录标识 tu_id 字段 类型 bigint 备注 pk, not nu

6、ll 所属组织 登录帐号 用户密码 用户姓名 手机号 电子邮箱 创建时间 登录时间 上次登录时间 登录次数 to_id login_name password vsername mobile email gen_time login_time last_login_time count bigint varchar(64) varchar(64) varchar(64) varchar(20) varchar(64) datetime datetime datetime bigint fk, not null not null not null not null not null not nu

7、ll 2. 角色表 角色表(TRole) 字段名称 角色ID 父级角色ID 角色名称 创建时间 角色描述 tr_id parent_tr_id role_name gen_time description 字段 类型 bigint bigint varchar(64) datetime varchar(200) 备注 pk, not null not null not null not null 3. 权限表 权限表(TRight) 字段名称 权限ID 父权限 权限名称 权限描述 tr_id parent_tr_id right_name description 字段 类型 bigint bi

8、gint varchar(64) varchar(200) 备注 pk, not null not null not null 4. 组表 组表(TGroup) 字段名称 组ID 组名称 父组 创建时间 组描述 tg_id group_name parent_tg_id gen_time description 字段 类型 bigint varchar(64) bigint datetime varchar(200) 备注 pk, not null not null not null not null 5. 角色权限表 角色权限表(TRoleRightRelation) 字段名称 记录标识 角

9、色 权限 权限类型 字段 trr_id Role_id right_id right_type 类型 bigint bigint bigint int 备注 pk, not null fk, not null fk, not null not null(0:可访问,1:可授权) 6. 组权限表 组权限表(TGroupRightRelation) 字段名称 记录标识 组 权限 权限类型 字段 tgr_id tg_id tr_id right_type 类型 bigint bigint bigint int 备注 pk, not null fk, not null fk, not null not

10、 null(0:可访问,1:可授权) 7. 组角色表 组角色表(TGroupRoleRelation) 字段名称 记录标识 组 角色 字段 tgr_id tg_id tr_id 类型 bigint bigint bigint 备注 pk, not null fk, not null pk, not null 8. 用户权限表 用户权限表(TUserRightRelation) 字段名称 记录标识 用户 权限 权限类型 字段 tur_id tu_id tr_id right_type 类型 bigint bigint bigint int 备注 pk, not null fk, not null

11、 fk, not null not null(0:可访问,1:可授权) 9. 用户角色表 用户角色表(TUserRoleRelation) 字段名称 记录标识 用户 角色 字段 tur_id tu_id tr_id 类型 bigint bigint bigint 备注 pk, not null fk, not null fk, not null 10. 用户组表 用户组表(TUserGroupRelation) 字段名称 记录标识 用户 字段 tug_id tu_id 类型 bigint bigint 备注 pk, not null fk, not null 组 tg_id bigint fk

12、, not null 11. 组织表 组织表(TOrganization) 字段名称 组织id 父组 组织名称 创建时间 组织描述 to_id parent_to_id org_name gen_time description 字段 类型 bigint bigint varchar(64) datetime varchar(200) 备注 pk, not null not null not null not null 12. 操作日志表 操作日志表(TLog) 字段名称 日志ID 操作类型 操作内容 操作人 操作时间 字段 log_id op_type content tu_id gen_t

13、ime 类型 bigint int varchar(200) bigint datetime 备注 pk, not null not null not null fk, not null not null Delphi 数据库开发经典案例解析 每一个系统都要对应不同的用户,而不同的用户就必然有着不同的使用权限。因此,权限管理是每一个应用系统都必须具备的功能,本章将详细介绍,后面的实例将不再包含该功能。 (1) 新建一个窗体,将其保存为FormRights.pas,其控件布局如图1.58所示。 图1.58 权限管理窗体的控件布局 (2) 按表1.9设置权限管理窗体的控件属性。 表1.9 权限管理

14、窗体控件清单 控件类型 Form Label Label Combobox ListBox Button GroupBox CheckBox CheckBox CheckBox CheckBox CheckBox CheckBox CheckBox ADOQuery ADOQuery ADOQuery ADOQuery 对 象 名 FormRights Label Labe2 Combobox1 ListBox Button1 GroupBox1 CheckBox1 CheckBox2 CheckBox3 CheckBox4 CheckBox5 CheckBox6 CheckBox7 ADOQ

15、uery1 ADOQuery2 ADOQuery3 ADOQuery1 属 性 Caption Caption Caption Caption Caption Caption Caption Caption Caption Caption Caption Caption ConnectionString ConnectionString ConnectionString SQL 取值(说明) 权限管理 选择要浏览权限的用户名 该用户所拥有的权限 确认修改 用户权限浏览 商品资料维护 供货商资料维护 客户资料维护 进货单 销售单 库存查询 权限管理 如前述 如前述 如前述 select 姓名 f

16、rom 用户清单 (3) 实现用户权限管理的代码如下。 /-关闭窗体时同时关闭对权限清单的插入许可功能- procedure Trights.FormClose(Sender: TObject; var Action: TCloseAction); begin /先将对权限清单表的插入功能关闭 adocommand1.CommandText:=SET *Y_INSERT 权限清单 off; adocommand1.Execute; /关闭窗体是返回上一级窗体 manage.show; end; /-窗体显示时,为下拉列表框设置用户词典- /-不允许对管理员sys的权限进行设置- procedu

17、re Trights.FormShow(Sender: TObject); begin adoquery1.Close; adoquery1.SQL.Clear; adoquery1.SQL.Text:=select distinct 姓名 from 用户清单 where 姓名!=sys; adoquery1.Open; combobox1.Clear; while not adoquery1.Eof do begin combobox1.Items.Add(adoquery1.fieldbyname(姓名).AsString); adoquery1.Next; end end; /-将下拉列

18、表中选中的用户所对应拥有的权限显示在列表框中- procedure Trights.ComboBox1Change(Sender: TObject); var str,temp:string; begin adoquery2.Close; adoquery2.SQL.clear; adoquery2.SQL.Text:=select 权限名称 from 权限清单 where 用户编号=(select 用户编号 from 用户清单 where 姓名=+combobox1.Text+); adoquery2.Open; listbox1.Clear; while not adoquery2.Eof

19、 do begin temp:=adoquery2.fieldbyname(权限名称).AsString; listbox1.Items.Add(temp); adoquery2.Next; end; /-根据用户的权限修改checkbox中的内容- /-判断用户是否拥有商品清单管理权限- adoquery2.Close; adoquery2.SQL.Clear; adoquery2.SQL.Add(select 用户编号 from 权限清单 where (用户编号=(select 用户编号 from 用户清单 where 姓名=+combobox1.Text+)and(权限名称=+check

20、box1.Caption+); adoquery2.Open; if adoquery2.FieldByName(用户编号).AsString then checkbox1.Checked:=true else checkbox1.Checked:=false; /-判断用户是否拥有供货商资料管理权限- adoquery2.Close; adoquery2.SQL.Clear; adoquery2.SQL.Add(select 用户编号 from 权限清单 where (用户编号=(select 用户编号 from 用户清单 where 姓名=+combobox1.Text+)and(权限名称

21、=+checkbox2.Caption+); adoquery2.Open; if adoquery2.FieldByName(用户编号).AsString then checkbox2.Checked:=true else checkbox2.Checked:=false; /-判断用户是否拥有客户资料管理权限- adoquery2.Close; adoquery2.SQL.Clear; adoquery2.SQL.Add(select 用户编号 from 权限清单 where (用户编号=(select 用户编号 from 用户清单 where 姓名=+combobox1.Text+)an

22、d(权限名称=+checkbox3.Caption+); adoquery2.Open; if adoquery2.FieldByName(用户编号).AsString then checkbox3.Checked:=true else checkbox3.Checked:=false; /-判断用户是否拥有进货单权限- adoquery2.Close; adoquery2.SQL.Clear; adoquery2.SQL.Add(select 用户编号 from 权限清单 where (用户编号=(select 用户编号 from 用户清单 where 姓名=+combobox1.Text+

23、)and(权限名称=+checkbox4.Caption+); adoquery2.Open; if adoquery2.FieldByName(用户编号).AsString then checkbox4.Checked:=true else checkbox4.Checked:=false; /-判断用户是否拥有商品销售单管理权限- adoquery2.Close; adoquery2.SQL.Clear; adoquery2.SQL.Add(select 用户编号 from 权限清单 where (用户编号=(select 用户编号 from 用户清单 where 姓名=+combobox

24、1.Text+)and(权限名称=+checkbox5.Caption+); adoquery2.Open; if adoquery2.FieldByName(用户编号).AsString then checkbox5.Checked:=true else checkbox5.Checked:=false; /-判断用户是否拥有库存查询权限- adoquery2.Close; adoquery2.SQL.Clear; adoquery2.SQL.Add(select 用户编号 from 权限清单 where (用户编号=(select 用户编号 from 用户清单 where 姓名=+comb

25、obox1.Text+)and(权限名称=+checkbox6.Caption+); adoquery2.Open; if adoquery2.FieldByName(用户编号).AsString then checkbox6.Checked:=true else checkbox6.Checked:=false; /-判断用户是否拥有权限管理权限- adoquery2.Close; adoquery2.SQL.Clear; adoquery2.SQL.Add(select 用户编号 from 权限清单 where (用户编号=(select 用户编号 from 用户清单 where 姓名=+

26、combobox1.Text+)and(权限名称=+checkbox7.Caption+); adoquery2.Open; if adoquery2.FieldByName(用户编号).AsString then checkbox7.Checked:=true else checkbox7.Checked:=false; end; /-修改选择的用户的权限- procedure Trights.Button1Click(Sender: TObject); var str:string; begin /获得与某个用户相对应的用户编号 UserName:=combobox1.Text; adoq

27、uery3.Close; adoquery3.SQL.clear; adoquery3.SQL.Text:=select 用户编号 from 用户清单 where 姓名=+UserName+; adoquery3.Open; UserNumber:=adoquery3.fieldbyname(用户编号).AsString; adoquery3.Close; /计算权限清单中的权限序号之最大值,以免其后输入的权限序号与已有的冲突 adoquery3.Close; adoquery3.SQL.clear; adoquery3.SQL.Text:=select max(权限序号) maxnum fr

28、om 权限清单 as max; adoquery3.Open; MaxNumber:=adoquery3.fieldbyname(maxnum).AsString; adoquery3.Close; /删除该用户的所有权限记录以备下一步的修改 adocommand1.CommandText:=delete from 权限清单 where 用户编号=+UserNumber+; adocommand1.Execute; /打开对用户权限记录表的插入权限,这是由建立数据库的时候就设置好的,用完后需要把它关闭 adocommand1.CommandText:=SET *Y_INSERT 权限清单 on

29、; adocommand1.Execute; /检查checkbox1状态,判断是否给该用户商品资料维护权限 if checkbox1.Checked then begin order:=strtoint(MaxNumber)+1; str:=inttostr(order); adocommand1.CommandText:=insert into 权限清单(权限序号,用户编号,权限名称) values(+str+,+UserNumber+,+checkbox1.Caption+); adocommand1.Execute; end; /检查checkbox2状态,判断是否给该用户供货商资料维

30、护权限 if checkbox2.Checked then begin order:=strtoint(MaxNumber)+2; str:=inttostr(order); adocommand1.CommandText:=insert into 权限清单(权限序号,用户编号,权限名称) values(+str+,+UserNumber+,+checkbox2.Caption+); adocommand1.Execute; end; /检查checkbox3状态,判断是否给该用户客户资料维护权限 if checkbox3.Checked then begin order:=strtoint(MaxNumber)+3; str:=inttostr(order); adocommand1.Co

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1