Delphi开发的程序用户权限控制的有关问题

Delphi开发的程序用户权限控制的问题
一直没有接触过权限方面的问题,在网上也看过几个Demo和文章,
我现在采用的是数据库建立表的方式做的。
如图:Delphi开发的程序用户权限控制的有关问题Delphi开发的程序用户权限控制的有关问题
我在用户登陆的时候取出每个用户的权限列表,如:admin 的权限就是 :10:13:14:15:20:16:17:18
我怎么让程序在用户登陆的时候,此用户没有权限的菜单不显示呢?
不想在每个菜单的事件里判断,这样太麻烦了,能不能在登陆的时候此用户没有权限的菜单就自动隐藏呢?有做过权限框架的能提供给我更好,好的方法后续加分!Delphi开发的程序用户权限控制的有关问题
------解决方案--------------------
菜单权限

可以建立一个菜单关系的数组,简单的就 0 表示无权限,1表示有权限

这样,菜单可以对应了一串 011010101 …… 之类的数字了,

将这串数字保存到用户权限表。

每次系统启动后,解析后,对菜单项  visable 赋值就好。
------解决方案--------------------
引用:
Quote: 引用:

菜单权限

可以建立一个菜单关系的数组,简单的就 0 表示无权限,1表示有权限

这样,菜单可以对应了一串 011010101 …… 之类的数字了,

将这串数字保存到用户权限表。

每次系统启动后,解析后,对菜单项  visable 赋值就好。


怎么解析的?


解析只是让你将你怎么保存的串(保存时,用01010 就太不好看了吧…… 可用十六进制,或者加密下再保存,这都随便你了,呵呵),然后反过来还原成0101,带入到 菜单叶子节点的 ENABLE  或者 VISABLE 里面啊,再显示主界面,OK
………………

比如你 “菜单” 下面有子项----新建,保存,另存,……子项还有二级菜单…… 等 , 可以当成是个树嘛,只控制叶子节点 ENABLE 的有效无效就可以了。 无效的你就点不进去了啊

权限设置的时候, 有效,就标记为1 ,无效,标记为0.

然后遍历树的所有叶子,将该值( 有效1 ,无效0)按照顺序连起来就可以了,不就是一串 01010类似的代号了么,保存的话,0101……也好,十进制,十六进制也好,随便你了……

权限赋值的时候,在登录数据库后,显示主界面前,马上取出该串,反过来对菜单所有叶子的  enable 赋值,不就达到目的了额。


------解决方案--------------------
如果你做数据库方面的系统,就有可能有的用户,对某系模块只能浏览,有些用户可以修改和浏览,但不能删除数据,还有些用户,可以则有完全的权限,也都可以用这种方式控制模块的。

定义模块顺序,然后 权限表分别建立比如 无权限,只读,修改,完全等字段,启动时解析好赋值给全局变量,或者模块启动时判断下对用模块下的几个权限, 就可以在操作时直接控制了
------解决方案--------------------
Delphi开发的程序用户权限控制的有关问题
------解决方案--------------------
主题:权限管理
    
【功能说明】管理用户及用户的权限。
  
  权限分为操作权限与数据权限.
  操作权限共有128个权限, 其中前八个为系统定义的权限(预览、新增、编辑、删除、打印、
  导出、 执行、 作废), 其余为各模块的扩展权限, 例如员工档案还需要对身份证
  家庭地址等再作控制,这些为特定模块才有的权限称为扩展权限,例如员工档案
  还需控制身份证号、家庭地址等扩展权限,也可以由用户自定义。
  数据权限定义为用户管理的数据范围权限,分为人事、考勤、薪资, 供应商,客户,物料等几个大类。


【权限流程】
  1. 创建角色,角色是对具有同一类职能的人构成的虚拟组织, 一般是根据职位来设定的。
  例如所有的考勤文员的操作权限是一样的,就可以定义一个考勤文员角色,
  并对它进行授权。那么有新的考勤文员(A)进来,就授予考勤文员角色即可。
  而不需要对(A)进行单独的模块授权,方便权限管理。

  2. 创建用户,用户是实际操作系统的人,必须创建用户才能操作主程序,系统管理员不可以登录主程序.
    
  3. 用户授权,授权用户可以操作的权限及数据范围权限。
  1. 用户操作权限来源,用户权限=(本身权限 + 角色权限 )
  (1)继承于角色的权限,可以来源一个或者以上的角色权限,例如,用户A可以继承考勤文员
  和薪资文员权限。另外用户可以不继承角色权限。
  (2)来源于本身的权限,用户不但可以继承角色权限,还拥用本身的权限,本身权限优先级
  高于继承的角色权限,例如用户A继承的考勤文员角色没有<删除>权限,但用户本身具
  有<删除>R权限, 则用户A具有<删除>权限, 另外用户A继承的考勤文员角色具有
  <删除>权限, 但特别指定用户本身没有<删除>R权限, 则用户A没有<删除>权限,在
  没有特别指定的情况下,用户会继承角色的<删除>权限

  2. 用户数据权限来源, 因为角色不具体数据范围权限,因此必须为每个用户分配数据范围权
  限。


  4.谁来授权, 哪些帐号可以给用户授权
  (1) 系统管理员 帐号为admin, 默认密码不空.

  (2) 帐套管理员, 由系统管理员创建由帐套时指定的特定帐号, 在其管理的帐套内与系统管理员同
  等权限

  (3) 拥有授权的用户, 这个最难理解,授权并不定要系统管理员来授权,在大的企业,存在多家子
  公司的情况下,系统管理员并不清楚子公司的权限划分,且子公司修改每次都来找系统管理员
  也非常麻烦, 因此系统管理员可以把授权的权限分配给特定的用户,让该用户直接授权即可。
  例如: X公司有X1,X2,X3三家子公司 那么系统管理员可以分为授予X1, X2, X3三家子公司
  的用户(u1,u2,us)的权限,并指定他们可以授权给其他用户,这样X1公司的其他用户
  就全完可以由u1来指定权限,指定的权限肯定不会超过u1的权限, 且u1仍然可以把
  授权的权限授予下属用户。
    
    
  5.系统控制权限流程

  (1). 检查系统控制参数(默认控制权限的), 如不控制则全部权限,否则进入下一步,
  参数控制请点击主菜单.权限管理 -> 权限参数
    
  (2) 检查子系统控制参数是作权限控制,如不控制则拥用子系统全部权限, 否则进入下一步
  子系统参数控制点击 主菜单.系统管理 -> 系统参数
     

  (3). 检查用户是否拥用全部权限,如有则全部权限,否则进入下一步
    
  (4). 获取用户本身权限
    
  (5). 获取继承角色权限   

------解决方案--------------------
权限系统的常用表格
1. 用户表(用户ID, 用户名称, 用户帐号...)

2. 角色表(角色ID, 角色名称,...) 具有同一类职能的人构成的虚拟组织, 一般是根据职位来设定的
  可以预先定义一个系统常用的角色(只读角色, 审核角色, 文员角色)

3. 模块表(模块Id, 模块编号,模块名称...), 表示整个系统有多少模块.

4. 模块权限表(模块ID, 权限序号, 权限名称....), 表示每个模块具有哪些权限, 分为三大部分权限
  1.(包括新增,删除,编辑,打印,共性的权限.
  2.还要包括每个模块特定的权限(金额, 单价之类), 又称字段权限.
  3. 未考虑到的用户需求特定权限,  

5. 角色权限表(角色ID, 模块ID, 权限序号, 读权限, 写权限...) 控制每个角色能控制哪些模块的哪些   
  权限,及字段权限读写权限, 有些只读,不能写.

6. 用户权限表(角色ID, 模块ID, 权限序号, 读权限, 写权限...) 控制每个用户能控制哪些模块的哪些   
  权限,及字段权限读写权限, 有些只读,不能写.

7. 用户角色表(用户ID, 角色ID) 表示用户拥用什么角色, 可以多个角色

以上权限还只能控制操作权限, 能进行哪些操作, 还有一项数据范围权限
用来控制对哪些数据操作, 例如华南分公司的用户只能操作华南公分司的数据,  
数据范围一般按制的对象来分类,分等级来控制, 例如华南分公司高层数据,