权限一定要做活,不然维护起来怎么办呀!你可以这样,单独建一个可以加减权限的功能。当新进用户时,让管理员自己根据要求,给一定的权限。这样咱们做完后就不用管了。那个用户需要增加权限或减少权限就可以由系统管理员搞定了。以下资料仅供参考。
在一个网络应用程序中,对不同的使用人员授与不同的程序使用权是非常重要的。一般的应用程序都分:录入权,查询权,修改权,审核权等等,很多功能可细分到菜单条级,才能方便管理,不同的功能应用应该授与不同工作性质的人员,才能使一个公司或团体分工明确,责任清晰,实现规范化管理。 
对系统管理人员来说灵活方便地设置不同人员的对程序的不同权限,并能够不以用户身份进入程序也能查看到用户所拥有的权限,这是后台管理程序最基本的要求。本人通过实践摸索在PB中实现了用户程序到菜单条级权限的设置和查看。此模块方便之处是管理员在设置用户权限时所见的菜单与用户所用的菜单一致,用户有哪些权限一目了然。 
我们先来看PB与此相关的两个函数:Mid and Replace 
1.函数Mid ( string, start {, length} ) 
取string字串中第start项后的length位字串。 
例:Mid("ABCDEFG",3,2) 
返回值:"DE" 
2.函数Replace ( string1, start, n, string2 ) 
替换string1中第start 项后n位,用string2 串。 
例:Replace ( "ABCDEFGH",3,2,"abc" ) 
返回值:"ABCabcFGH" 
到此可能用过PB的朋友已能猜出这两个函数就是在PB中实现菜单条权限定义的基础。 
我们先假设我们应用程序的菜单如下图: 
M_1  M_2  M_3 ...... 
M1_1  M2_1  M3_1 
M1_2  M2_2  M3_2 
M1_3  M2_3  M3_3 
M1_4  M2_4 
    M2_5 
 
要求菜单条变量名的定义严格按照矩阵方式定义。然后复制一份与应用程序菜单一样的菜单模式,用于系统授权模块使用,包括菜单条变量名也一样,只不过菜单条下无调用程序代码,而是菜单状态设置函数。设三个字符串全局变量,用于表示菜单条的状态。我们约定"0"表示菜单条为不可选,"1"为可选。 
string M1,M2,M3 
M1="0000"     file://对应M_1的四个子菜单条 
M2="00000"     file://对应M_2的五个子菜单条 
M3="000"      file://对应M_1的三个子菜单条 
设初始值为菜单条皆不可选。 
在M1_1菜单下clicked事件程序为: 
IF m1_1.Checked = TRUE THEN 
m1_1.UnCheck( ) 
M1 = Replace( M1, 1, 1, "0") 
ELSE 
m1_1.Check( ) 
M1 = Replace( M1, 1, 1, "1") 
END IF 
  
在M1_1菜单下clicked事件程序为: 
  
IF m1_2.Checked = TRUE THEN 
m1_2.UnCheck( ) 
M1 = Replace( M1, 2, 1, "0") 
ELSE 
m1_2.Check( ) 
M1 = Replace( M1, 2, 1, "1") 
END IF 
.....其它以此类推 
函数说明: 
file://m1_2.Check( )在所点选菜单条前加"V"(钩符号) 
file://m1_2.UnCheck( ) 在所点选菜单条前去掉"V"(钩符号) 
  
如果A用户可使用M1_1,M1_3; M2_2; M3_1。那通过你鼠标的点选,菜单状态变量的值应该为: 
M1="1010" 
M2="01000" 
M3="100" 
  
如果B用户可使用M1_1; M2_3,M2_4,M2_5; M3_1,M3_2,M3_3。那通过你鼠标的点选,菜单状态变量的值应该为: 
M1="1000" 
M2="00111" 
M3="111" 
把此值对应存入A、B用户的权限字段中,在A、B用户进入应用程序时取出,对应设置菜单条的可用与不可用,即实现了对用户使用菜单权限的定义。 

解决方案 »

  1.   

    谢谢二楼朋友,你的方法可以将权限与菜单挂钩,可是问题时,进入同一个菜单项不同人员也不同呀?比如进入同一个表单,可是有人可是修改,有人只能查看。只细化到菜单还是不行的。
    另外:楼上朋友还没明白我的意思
    每个人的权限一定要能修改,我是指一个系统中所有存在的权限是不是可以随时增加,比如已有:入库修改,入库查询,入库打印等20种权限[权限编码从0001到0020],这时系统可以正常使用了,在使用过程中,由于细化需求,又要增加几个权限,比如增加汇总权限[权限编码为:0021],但是当时写的验证权限的代码没有考虑到汇总权限,这时就只能改代码了,我就是指这种可扩展性能否实现,如何实现,谢谢。
      

  2.   

    做权限时,最重要的是要有角色这个功能,否则当系统中的用户很多/权限列表内容很多时,对于每次分配权限都是一种痛苦
      

  3.   

    做权限时,最重要的是要有角色这个功能,否则当系统中的用户很多/权限列表内容很多时,对于每次分配权限都是一种痛苦
    -----------------------------
    谢谢,如何做呀?能给点代码吗?
      

  4.   

    我支持给固定的编码,
    但是,你可以设置一个是程序中功能的编码(手工设置),一个是模块功能的编码(自动产生)
    程序中验证依赖模块的编码