QueryIt版本升级概要(报表权限,缓存更新)

现在的QueryIt没有任何权限控制,仅加入了仅QueryIt客户端才能连接WebService,其他的方式将无法连接到该WebService,由于有为第三方合作单位的报表,因此必须加入权限控制,否则报表可能被不该使用的人所见。我设计的概要如下:

另一个Com组件提供权限控制,由于报表权限和用户仅是一个多对多的关系,考虑在Query.xml的每个报表中定义可存取的用户列表,这样在客户端请求报表列表时根据其登录情况来决定是否返回该报表。该登录情况以SoapHeader中包含的用户认证Cookie来判断用户名称,该Cookie在用户成功登录后返回并在返回前写入到某存储位置(必须写入),因为com+组件是池化的,不能在内存中,否则其他的com组件无法正确认证该用户,我不想使用共享机制来做)。这样同时能枚举当前在使用该服务的用户。至于该存储位置如果放在数据库中到是很方便,但是觉得这样和业务数据混在一起不是很好,注册表我是不想动的,看来只有文件了,还要再撰写一个xml文档格式来保存这个东西。恩,就这样弄。还有一个问题是是否应该将用户存取报表的配置集成在Query.xml中,如果我用另一个com组件来验证用户的化,就应该将该配置独立出来。应该是这样,另外提供一个小工具,来提取query.xml中的报表和用户的对应信息。生成authentic.xml文件,手工配置该文件,那么工作过程应该是这样:

客户端传输登录信息

  1. DataService根据Query.xml配置,决定采用com来认证,并将登录信息传递给authentic.dll
  2. authentic.dll判断登录信息是否正确,如果正确:
    • 根据authentic.xml,返回其可存取的报表hashid列表
    • 生成authentic.cookie返回,并写入到loginCookie.xml中
  3. 客户端接受到认证cookie,缓存在当前会话中,同时应用报表列表到界面上。
  4. 客户端调用每个报表时,在soapheader中包含该cookie
  5. dataService将该cookie通过authentic.dll认证
  6. authetic.dll读取loginCookie.xml中的信息,并认证该cookie是否可用
  7. dataService根据认证结果返回错误或开始执行报表返回。

另一个bug是,QueryIt使用system.xml来确定webservice的地址,并在第一次调用的时候缓存wsdl文件在本地,但是当前仅是如果有本地文件,就不管system.xml了,看来应该加入system.xml中的地址如果和缓存wsdl中webservice地址不一样的化,应该以system.xml为准,否则想现在更新了system.xml根本就不管用。需要更新前把缓存的wsdl文件删除。(注:缓存了wsdl后,每次调用webservice将不用缺省每次取得wsdl,减少一次调用,这也是delphi开发webservice的默认行为)

再有就是queryit.client.xml文件,该文件在每个客户端均不同,是客户端自己调整的,它的作用是存储客户端自己配置的报表对应的打印机。该文件是不应该被升级或安装所覆盖的,但是rar自解压包只能是全覆盖或全不覆盖,不能针对每一个文件有单独的设置,不过没有自习看,研究以下避免升级的时候麻烦。

 

上述问题,已与上周完成.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值