急!在pb中怎样设定用户的权限?
本人在毕设阶段,做了一个小的mis系统,想请教各位高手,如何根据不同的用户权限实现不同的操作?急用,最好有例子,小女子谢过了。 问题点数:0、回复次数:12Top
1 楼Tigersong(宋)回复于 2003-06-02 18:04:45 得分 0
若将权限划分至窗口级别,由于在一个模块下的所有菜单项应该是不重复的,而这些菜单项又唯一对应一个窗口。在此情况下,个人想法如下:
创建一个表按用户记录其所能操作的窗口
结构:用户代号、模块名称、菜单项(窗口名)
然后在应用程序登陆的时候,先检查上表,获取此登陆用户所拥有的菜单项有那些。对用户不拥有的菜单项属性进行设置(设置为不可激活或者隐藏),这样也就体现了权限分配的问题。
Top
2 楼rogery(后来者__躬自厚而薄责于人)回复于 2003-06-02 18:12:02 得分 0
例子就不行了吧,因为我们毕竟在公司,传公司的程序不太好吧。说个方法就可以了吧。
Tigersong(宋) ,说的对可以通过权限表来读取所属权限。
还有一个方法:
就是用一个笨办法,把所有的窗口所在菜单的节点找到,做一个W窗口来设置这些节点的值。然后把可用值和不可用值写到一个表中去。
方法和宋兄的差不多。通过树形控件比较好实现。
Top
3 楼hujunyan(深呼吸)回复于 2003-06-02 18:13:42 得分 0
可以根据不同用户,给与不同权限的菜单(可以让一些选项值成为invisible),然后把每个人的权限信息存储在数据库中.
Top
4 楼sure2002(剑心)回复于 2003-06-02 22:34:56 得分 0
我最近就在做一个软件.正在考虑分配权限的问题.一个失败的权限分配就像"运动员去领奖了却摔了一跤"一样.先明确哪些权限,而且要考虑有些权限可能扩展,有些可能取消,如果设计不好完全有可能使以后的权限维护十分混乱,我统一在menu窗口中设置权限,如果分散开来维护十分困难。
比如:
w_produce.cb_1.enabled = false
w_lack.ddlb_1.visible = true
等等Top
5 楼cnliutian(手起刀落,小日本鸡鸡被砍掉)回复于 2003-06-03 06:44:24 得分 0
强烈upTop
6 楼qqqwww999888(月月鸟)回复于 2003-06-03 08:53:20 得分 0
upTop
7 楼enzey(sun)回复于 2003-06-03 10:45:40 得分 0
对系统管理人员来说灵活方便地设置不同人员的对程序的不同权限,并能够不以用户身份进入程序也能查看到用户所拥有的权限,这是后台管理程序最基本的要求。本人通过实践摸索在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用户进入应用程序时取出,对应设置菜单条的可用与不可用,即实现了对用户使用菜单权限的定义。
Top
8 楼waterstony(王小石)回复于 2003-06-03 11:22:52 得分 0
建用户和目录id对应的表,目录id分层,第一层两位(01),第二层4位(0101)...
然后建一张目录id与目录名对应的表Top
9 楼dfsde(开山)回复于 2003-07-13 11:25:39 得分 0
建个表 包括;用户 密码 权限[number (1)]
在程序中用 if 语句
exmple:int li_pop
ii_mod=1
il_cid=0
il_row=0
select visible into :ii_pub from loues;
if ii_pub=1 then cb_vote_rst.enabled=true
select pop into :li_pop from user where uid=:gs_uid; /*用户的权限
if li_pop=2 then
cb_set_cand.enabled=true
cb_vote_rst.enabled=true
end if
dw_1.settransobject(sqlca)
dw_1.retrieve()
也就是说在表的加个字段是用来判断用户权限的
Top
10 楼dfsde(开山)回复于 2003-07-13 11:34:03 得分 0
上面的变量 gs_uid是全局变量 用来标识登陆用户的Top
11 楼2dian1G(小硬盘)回复于 2003-07-13 16:18:12 得分 0
模块表:菜单名,功能描述
用户可操作模块表:用户代码,菜单名,是否可以操作。
有了这个表结构,就全解决了。不用编那么长的程序,数据窗口还可以对操作员可操作的模块进行维护。Top
12 楼wooaoo(永远不放弃)回复于 2003-07-13 16:38:20 得分 0
建立权限表,倒入菜单信息,并给菜单项编号;(不要放在界面上,系统内部维护好)
(菜单编号,菜单名称)编号从1开始编起……
做一个用户设置权限的界面,列出所有菜单项供管理员给用户分配;有权限为0,无权限为1
在用户表中留一个字段存放权限,比如1011101代表这个用户有操作2号、7号菜单的权限
这是个比较简单的方法……
Top




