多用户排他处理

时间:2022-08-29 09:42:55
手头上的项目要求对各个功能模块进行排他处理,比如用户1第一个使用了模块1,他有编辑的权限,如果用户2也使用模块1,那么就只有阅览的权限了。

按照客户的要求,exe只包含菜单,其它对数据的处理全部在dll里进行,并且dll是放在服务器上,各用户通过远程调用。

请问,如果所有的用户都调用相同的程序,那么如何判断多个用户id的使用权限呢,并且怎么知道哪个人对应哪个用户id呢?麻烦大家帮忙,谢谢!

7 个解决方案

#1


使用数据库或配置文件给功能模块加标志,如果有用户已进入模块则标志为1,其他用户进入模块前先检查标志,如果为1则只有读权限。

#2


给功能模块加标志位,这个我目前也是这样做的,不过我还想知道,所有用户调用同一个程序时,这一个程序,可以获得多个用户id吗,如果可以,怎么判断每个用户对应的id呢

#3


该回复被版主删除

#4


用户表(userid,username...) pk: userid
功能表(functionid,functionname,isactive) pk:functionid,isactive 表示该功能是否活动
权限表(userid,functionid) pk:userid + functionid

找出某个用户非活动的权限:
select a.* from 功能表 as a inner join 权限表 as b on a.functionid = b.functionid and a.isactive = 0 where b.userid = '***'

#5


需要注意的是在用户对任何模块的访问之前要更新功能表。

#6


有个思路是在数据库中建两个临时表,一个记录所有[模块信息],一个记录[模块使用信息]。
当用户查询或者编辑模块时,就搜索[模块使用信息表]。看被使用的模块当前状态是多少,是正在查询,还是正在编译,谁在查询等等。

#7


不好意思,可能我没有表达清楚意思,我现在困惑的是,比如:
用户A使用ID 001 调用服务器上的程序;
同时用户B使用ID 002 调用服务器上的同一个程序;

那么该程序得到的ID是什么,如果2个都能得到,那么怎么知道A的ID是001,B的是002

#8


郁闷 ,这个也要用程序实现啊。
要想得到用户A,B的ID,你需要有个用户表,里面存储用户名,用户ID,密码什么的。
当用户调用程序时,查询此用户ID就可以了。

或者建个用户对象。
class 用户
{
 private String 用户名,用户ID
 用户名{
  get {}
  set {}
 }
 用户ID{
 get {}
 set {}
 }
 ...

}

上面是用C写的。你可以转成VB的。上面有两个属性,一个是用户名属性,一个是用户ID属性。
当用户调用程序时,就可以通过调用属性 [用户ID]得到了。

#1


使用数据库或配置文件给功能模块加标志,如果有用户已进入模块则标志为1,其他用户进入模块前先检查标志,如果为1则只有读权限。

#2


给功能模块加标志位,这个我目前也是这样做的,不过我还想知道,所有用户调用同一个程序时,这一个程序,可以获得多个用户id吗,如果可以,怎么判断每个用户对应的id呢

#3


该回复被版主删除

#4


用户表(userid,username...) pk: userid
功能表(functionid,functionname,isactive) pk:functionid,isactive 表示该功能是否活动
权限表(userid,functionid) pk:userid + functionid

找出某个用户非活动的权限:
select a.* from 功能表 as a inner join 权限表 as b on a.functionid = b.functionid and a.isactive = 0 where b.userid = '***'

#5


需要注意的是在用户对任何模块的访问之前要更新功能表。

#6


有个思路是在数据库中建两个临时表,一个记录所有[模块信息],一个记录[模块使用信息]。
当用户查询或者编辑模块时,就搜索[模块使用信息表]。看被使用的模块当前状态是多少,是正在查询,还是正在编译,谁在查询等等。

#7


不好意思,可能我没有表达清楚意思,我现在困惑的是,比如:
用户A使用ID 001 调用服务器上的程序;
同时用户B使用ID 002 调用服务器上的同一个程序;

那么该程序得到的ID是什么,如果2个都能得到,那么怎么知道A的ID是001,B的是002

#8


郁闷 ,这个也要用程序实现啊。
要想得到用户A,B的ID,你需要有个用户表,里面存储用户名,用户ID,密码什么的。
当用户调用程序时,查询此用户ID就可以了。

或者建个用户对象。
class 用户
{
 private String 用户名,用户ID
 用户名{
  get {}
  set {}
 }
 用户ID{
 get {}
 set {}
 }
 ...

}

上面是用C写的。你可以转成VB的。上面有两个属性,一个是用户名属性,一个是用户ID属性。
当用户调用程序时,就可以通过调用属性 [用户ID]得到了。