诚心求教[高分]:实现此功能有什么好的办法?

stg609 2008-11-20 09:39:00
.Net 中用C/S模式来开发(分不在多,有解则灵!)

现打算实现类似如下的功能:请一定要接着往下看哦~~
服务器端拥有全部的功能如功能A(打印)、功能B(截图)、...
服务器端可以决定客户端可以使用的功能,打个比方:
第一天,服务器端说:“客户端A,你表现不错,我允许你使用打印这个功能”。那么客户端A就具有了打印功能;第二天,服务器端又说:“客户端A,这一阵子,你帮助了很多要打印的人的忙,为了鼓励你,现在允许你也可以使用截图功能”。那么客户端A就具有了这两个功能。第三天,服务器端生气了,“客户端A,你太不像话了,让你截图,你居然截一些YY的图片,现在取消你截图的功能”。那么客户端A现在又只有一个打印功能了。

不知道,这个比方,大家有没有看明白?我的意思就是:服务器端可以指派权限给客户端,客户端只有在拥有了这个权限后,才能执行相关事件。

快看完了,坚持住~~

类似于这种功能,大家有没有碰到过?该怎么实现才能在性能上,效果上都能比较良好?

我现在头绪比较乱,想到一个是:
用一个数据库来存放各个客户端所具有的权限代号。
客户端程序中拥有执行所有功能的模块,这些功能代码已经写死在程序里。然后在每个调用前加上查找,即在数据库中取出来的用户的权限代号集合中查找该功能代号,如果有,则允许执行。否则不执行。

可是这样做,第一感觉,客户端过于臃肿,因为有些功能是不能实现的。第二、每次都要查找数据库,太耗费性能。

不管能不能解答,您都花费了时间在阅读我这个问题上,因此真诚地表示感谢~~
...全文
261 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
stg609 2008-11-22
  • 打赏
  • 举报
回复
现在打算采用抽象工厂模式来实现,大家觉得如何?设置一个抽象权限功能类,并且每个具体的权限功能都继承自此类。由具体的工厂类来调用这些具体的权限功能类。而这些工厂则继承自抽象工厂。由抽象工厂通过反射从配置文件中获取功能权限名,从而实例化工厂类。以此来调用权限。

也就是类似20楼的方法,服务器设置用户客户端可以使用的权限,然后用户登陆时,从服务器数据库上获取拥有的权限代号,如果本机没有该代号的功能模块,则通过socket或其它方式,请求下载模块程序集,下载到本机后,就可以利用抽象工厂模式来调用了。
单线程加锁 2008-11-22
  • 打赏
  • 举报
回复
用户对对应权限,可以对权限作修改。
PrinSun 2008-11-21
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 tmxk2002 的回复:]
现在微软已经不推remoting了
现在微软推出了wcf,可以传二进制,也可以是文本,基本上把微软以前的几种通讯的东西,包括asp.net webservice,remoting,wse等全部整合在一起了
如果lz选型客户端到服务器端的通讯组件,推荐wcf给你。
[/Quote]
你确定?Indigo就会替代Remoting? 那DCom呢?

remoting可以很好的解决序列化和传输协议上面的问题......
duping9626 2008-11-21
  • 打赏
  • 举报
回复
权限的控制在于你数据库的设计
一般就是用户权限和用户组权限,
比如你的功能是使用菜单形式的,
功能菜单项与权限表挂勾,动态从数据库加载菜单,有权限的则不显示或是禁用
xiaosanaiqinga 2008-11-21
  • 打赏
  • 举报
回复
总结:
1.客户端拥有所有执行代码。
2.使用服务的形式提供。

但是都需要有权限的控制。
蹲点学习!
  • 打赏
  • 举报
回复
我认为应该放到服务器上去控制权限,
客户端只是传递参数过去,服务器端返回权限列表。
客户端根据权限列表再去服务器上下载相应的模块和功能(应该只有一次,先到本地去比对,没有再去下载)。
采用provider的模式可以实现这个设计。
stg609 2008-11-21
  • 打赏
  • 举报
回复
我执行的功能比如截图等,截的肯定是本机的图片,是不需要服务器参与的,也就是说不需要从服务器获取数据。这样的话,用webservice是不是不太好呀?

[Quote=引用 16 楼 thc1987 的回复:]
就是这样,咱们的QQ不就…
[/Quote]
QQ是这样的吗?

[Quote=引用 18 楼 zhnzzy 的回复:]
其实说道底还是个权限判断问题,只要你数据库里面权限设计的好,没太多问题,也不必担心数据库耗费性能
[/Quote]
那执行相应权限的功能代码是全部都先写在客户端程序里,还是需要了再从服务器端取?
zhnzzy 2008-11-21
  • 打赏
  • 举报
回复
其实说道底还是个权限判断问题,只要你数据库里面权限设计的好,没太多问题,也不必担心数据库耗费性能
stg609 2008-11-21
  • 打赏
  • 举报
回复
就是权限的问题,这些权限是人为指定的,
比如管理员可以在服务器上选择客户端A能够执行哪些功能。
这些功能都只是在客户端执行,不是到服务器上执行。

可是怎么处理这个权限模块好呢?我是做成winform的。用webservices?
如果按照某些朋友说布尔值,或tree什么的,那就是说,客户端已经拥有所有功能模块喽,然后根据权限来选择哪个可以执行或不可以执行。这样客户端不是很累赘
猿敲月下码 2008-11-21
  • 打赏
  • 举报
回复
"我现在头绪比较乱,想到一个是:
用一个数据库来存放各个客户端所具有的权限代号。
客户端程序中拥有执行所有功能的模块,这些功能代码已经写死在程序里。然后在每个调用前加上查找,即在数据库中取出来的用户的权限代号集合中查找该功能代号,如果有,则允许执行。否则不执行。

可是这样做,第一感觉,客户端过于臃肿,因为有些功能是不能实现的。第二、每次都要查找数据库,太耗费性能。 "


就是这样,咱们的QQ不就这样吗?如果服务器好的也不怕查找了,腾讯公司不是运行的好好的嘛
  • 打赏
  • 举报
回复
现在微软已经不推remoting了
现在微软推出了wcf,可以传二进制,也可以是文本,基本上把微软以前的几种通讯的东西,包括asp.net webservice,remoting,wse等全部整合在一起了
如果lz选型客户端到服务器端的通讯组件,推荐wcf给你。
wangping_li 2008-11-21
  • 打赏
  • 举报
回复
LZ这个好像有点乱了,你的客户端指派是根据什么来的?是人为操作还是系统自动执行?
如果是人为操作的话就是一个权限问题了,你可以在直接设置用户可以访问哪些模块
把所有模块做成一个Tree,可以访问的打一个勾.不想让他访问就把勾去掉好了.
你的一句“客户端可以给服务端指派权限”,听得好悬,呵呵
本来客户端读取模块和数据就是从服务端来的,所以只要把权限去掉,自然没有了
没有你想的那么复杂
PrinSun 2008-11-21
  • 打赏
  • 举报
回复
这个你需要使用到远程组件调用,
服务器上有 Printer.dll,IPrinter.dll,PrtSC.dll,IPrtSC.dll ......这些组件,加上一个服务器宿主
客户端上有 IPrinter.dll,IPrtSC.dll......这些组件,加上客户端程序

客户端和服务器推荐使用Remoting或者现在的WCF(这个我暂且不清楚)通信,获取客户端相应的权限,可以是存在数据库中的,

有了权限就可以进行相应的组件调用了,也就可以实现相应的功能......
superplayboy 2008-11-21
  • 打赏
  • 举报
回复
我基本上是同意3楼的意见,你把问题搞得太花俏了,实际上就是权限控制。。。不过,因为你用的是.NET平台,你应该庆幸微软给你提供了几个层次的封装,让你可以实现SOA的解决方案

最初级的层次,你可以将一些东西封装起来,比如说打印,你可以将打印内容放在服务器端,客户端通过web service来获得要打印的内容,然后再打印。。。

如果web service封装你不满意(因为web service只能传输可序列化的对象),你可以用Remoting,几乎所有对象都可通过Remoting来传输,从服务器端获得对象,然后运行该对象的功能

如果上面的封装你不满意,最后就是终极方案了。c#拥有动态编译功能,你可以将模块的代码写好放服务器上,然后客户端下载这些代码,在客户端动态编译,然后执行。。你可以搜索Emit来了解更多细节
是是非非 2008-11-21
  • 打赏
  • 举报
回复
所谓的权限,对客户端来说只是一堆bool变量而已

每次登陆,服务器给客户端返回这么一组权限值就行了
qshzf 2008-11-21
  • 打赏
  • 举报
回复
你的思路就很好啊
涉及到管理的软件总是很烦的
derelictangel 2008-11-21
  • 打赏
  • 举报
回复
看完了,C/S 是啥?

PS:
我的目标是 ---->





















^_^
stg609 2008-11-21
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 haiyangshao 的回复:]
B/S架构的,好不好实现,本人不太懂
我是做C/S架构的,天天在跟这个功能打交道

基本原理是,在数据库建立一个用户权限数据库,保存各个用户的权限。
然后在用户登录时,系统从数据库中查找用户具用的权限,能调用哪些功能

系统的管理员可以为用户配置不同的权限。
[/Quote]

我就是要实现C/S架构的,那你这个客户端应该已经具有了所需执行的功能的代码了吧?只是根据权限来决定能否使用,是吗?
stg609 2008-11-21
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 tmxk2002 的回复:]
采用provider的模式可以实现这个设计。
[/Quote]

我刚了解了下,可能比较片面,感觉采用这种模式,好像只是用于动态的选择可以执行的代码。但是能做到客户端根据权限列表再去服务器上下载相应的模块和功能?

“到客户端根据权限列表再去服务器上下载相应的模块和功能”这个该怎么设计呢?有没有什么例子可以参考的吗?我对这个一点没头绪
haiyangshao 2008-11-21
  • 打赏
  • 举报
回复
B/S架构的,好不好实现,本人不太懂
我是做C/S架构的,天天在跟这个功能打交道

基本原理是,在数据库建立一个用户权限数据库,保存各个用户的权限。
然后在用户登录时,系统从数据库中查找用户具用的权限,能调用哪些功能

系统的管理员可以为用户配置不同的权限。
加载更多回复(13)

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧