解决方案 »

  1.   

    菜单权限可以建立一个菜单关系的数组,简单的就 0 表示无权限,1表示有权限这样,菜单可以对应了一串 011010101 …… 之类的数字了,将这串数字保存到用户权限表。每次系统启动后,解析后,对菜单项  visable 赋值就好。
      

  2.   


    怎么解析的?解析只是让你将你怎么保存的串(保存时,用01010 就太不好看了吧…… 可用十六进制,或者加密下再保存,这都随便你了,呵呵),然后反过来还原成0101,带入到 菜单叶子节点的 ENABLE  或者 VISABLE 里面啊,再显示主界面,OK
    ………………比如你 “菜单” 下面有子项----新建,保存,另存,……子项还有二级菜单…… 等 , 可以当成是个树嘛,只控制叶子节点 ENABLE 的有效无效就可以了。 无效的你就点不进去了啊权限设置的时候, 有效,就标记为1 ,无效,标记为0.然后遍历树的所有叶子,将该值( 有效1 ,无效0)按照顺序连起来就可以了,不就是一串 01010类似的代号了么,保存的话,0101……也好,十进制,十六进制也好,随便你了……权限赋值的时候,在登录数据库后,显示主界面前,马上取出该串,反过来对菜单所有叶子的  enable 赋值,不就达到目的了额。
      

  3.   

    主题:权限管理
        
    【功能说明】管理用户及用户的权限。
      
      权限分为操作权限与数据权限.
      操作权限共有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). 获取继承角色权限   
      

  4.   

    权限系统的常用表格
    1. 用户表(用户ID, 用户名称, 用户帐号...)2. 角色表(角色ID, 角色名称,...) 具有同一类职能的人构成的虚拟组织, 一般是根据职位来设定的
      可以预先定义一个系统常用的角色(只读角色, 审核角色, 文员角色)3. 模块表(模块Id, 模块编号,模块名称...), 表示整个系统有多少模块.4. 模块权限表(模块ID, 权限序号, 权限名称....), 表示每个模块具有哪些权限, 分为三大部分权限
      1.(包括新增,删除,编辑,打印,共性的权限.
      2.还要包括每个模块特定的权限(金额, 单价之类), 又称字段权限.
      3. 未考虑到的用户需求特定权限,  5. 角色权限表(角色ID, 模块ID, 权限序号, 读权限, 写权限...) 控制每个角色能控制哪些模块的哪些   
      权限,及字段权限读写权限, 有些只读,不能写.6. 用户权限表(角色ID, 模块ID, 权限序号, 读权限, 写权限...) 控制每个用户能控制哪些模块的哪些   
      权限,及字段权限读写权限, 有些只读,不能写.7. 用户角色表(用户ID, 角色ID) 表示用户拥用什么角色, 可以多个角色以上权限还只能控制操作权限, 能进行哪些操作, 还有一项数据范围权限
    用来控制对哪些数据操作, 例如华南分公司的用户只能操作华南公分司的数据,  
    数据范围一般按制的对象来分类,分等级来控制, 例如华南分公司高层数据,8. 数据范围对象表(控制对象ID, 对象名称, 控制方法)9. 数据范围分类表(控制对象ID, 分类ID, 关联的对象(部门, 客户,供应商, 物料等)).10, 数据范围等级表(控制对象ID, 等级ID, 关联的对象等级表(员工等级, 客户等级...)))11, 用户数据范围控制总表(用户ID, 控制对象ID, 拥用全部, 全部分类, 全部等级...)12, 用户数据范围控制对象明细表(用户ID, 控制对象ID, 分类ID, 读权限, 写权限...)  
      (用户ID, 控制对象ID, 等级ID, 读权限, 写权限...)13. 用户数据范围模块控制对象明细表(用户ID, 控制对象ID, 模块ID, 分类ID, 读权限, 写权限...)  
      (用户ID, 控制对象ID, 模块ID, 等级ID, 读权限, 写权限...)
      此表很少用到,用来控制每个模块的范围权限.
      

  5.   

    我的处理办法:
    1、确定几级权限:例如至少二级
    (1)浏览权限
    (2)编辑权限(可以新增、修改和删除)
    2、如果二级,设置权限表。字段大致如下
    编号,用户,登录名,密码,T1,T2,....Tn,E1,E2,..En,ID
    T1,T1,T2,....Tn 对应菜单项(T=Truw有效,T=False无效)
    E1,E1,E2,....En 对窗口的编辑按钮E=True有效,E=False无效)
      

  6.   

    按楼主说的内容,用一个简单方式判断,就是菜单项的名字改成"menu"+powercode,也就是说“信息发送”菜单项的Name是“Menu12”。
    这样,在登录后,用循环判断全部的菜单项,如果不在权限表中的,就不显示。
      

  7.   

    先从权限表中查出菜单名称、权限到记录集
    select 菜单名称、权限 from 表名循环记录集
    while not 记录集.eof do
    begin
       if  权限=1 then 
        begin
          Tmenu( findcomponent(菜单名称)).visible:=true;
        end
        else
        begin
          Tmenu( findcomponent(菜单名称)).visible:=false;
        end;
    end;
      

  8.   

    表结构为 一个用户一个菜单对应一条记录
    例如  系统有20个菜单,如果有3个用户则共有60条记录
    --------------------------------
    username     menuname     power
    01                    m01                 1  
    01                    m02                 1  
    01                    m03                 1  
    01                    m04                 1  
    02                    m01                 1  
    02                    m02                 1  
    02                    m03                 1  
    02                    m04                 1