实体类与用户权限的问题!

连风 2008-10-27 09:45:25
需求说明:
1、现在有这样一个项目,我在里边定义了大量的实体类,每个实体类都会去查询数据库。
2、查询数据库已封装好,以接口的形式提供给外部使用。
3、查询数据库时是需要判断用户是否有权限的。
4、原来的想法是,用户登录后,我就将数据查询接口初始化好,放在一个静态变量中,这样在实体类里边,只需要调用该静态变量中的接口即可了。
5、但是由于项目需求,该实体类可以在服务器或客户端运行。

这样问题就出现了
1、如果该实体类放在客户端运行,这时是没有问题的。
2、如果该实体类放在服务器端(Webservices)运行,由于服务器端是多用户的,那么数据接口就不能放在静态变量中了。
3、如果不放在静态变量中,那在实体类中如何才能得到当前登录用户的数据接口呢?
4、目前想到的办法,在实体类调用数据库的地方,都传入数据接口。但这种方式太难看了,不知道大家还有好方法没有?

只有90分了,望大家帮忙啊!
...全文
358 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
连风 2008-10-27
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 zhnzzy 的回复:]
返回给ARRAYLIST或者dataset形式不可以吗?
[/Quote]

可以啊,不同的项目不同的需求嘛!
连风 2008-10-27
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 enihs 的回复:]
一般来说工程分为4-5个项目,表示层,数据层,业务层,实体类项目,服务类项目。
业务层获取相应的信息中就包括了各个实体类或者服务类的实例,再将这些实例作为参数传入数据层;不是把数据接口传给实体类
[/Quote]

[Quote=引用 14 楼 tmxk2002 的回复:]
如果是我来设计,我会让所有实体类继承同一个父类,然后这个父类是数据接口的入参,数据接口实现将实体类转换成调用数据库的sql或者存储过程。然后再封装一个adapter,来组合权限接口和数据接口。
[/Quote]

我好像想清楚点了,问题渐渐浮出水名了,我现在是将实体和业务逻辑都放在一个类中了,这样这个类就太庞大了!
如果将设计修改下,不知道行不行?
1、将实体类和业务逻辑分开
2、实体类只负责数据的传输、序列化等。
3、业务逻辑类负责实体类的创建和保存。
4、这样在业务逻辑实例中,就可以保存数据接口了(因为业务逻辑是不需要序列化的)。
IMAGSE 2008-10-27
  • 打赏
  • 举报
回复
友情帮顶一下~
zhnzzy 2008-10-27
  • 打赏
  • 举报
回复
返回给ARRAYLIST或者dataset形式不可以吗?
  • 打赏
  • 举报
回复
如果是我来设计,我会让所有实体类继承同一个父类,然后这个父类是数据接口的入参,数据接口实现将实体类转换成调用数据库的sql或者存储过程。然后再封装一个adapter,来组合权限接口和数据接口。
enihs 2008-10-27
  • 打赏
  • 举报
回复
一般来说工程分为4-5个项目,表示层,数据层,业务层,实体类项目,服务类项目。
业务层获取相应的信息中就包括了各个实体类或者服务类的实例,再将这些实例作为参数传入数据层;不是把数据接口传给实体类
连风 2008-10-27
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 tmxk2002 的回复:]
你说的数据接口,用户权限接口,其实也是一个类吧,只是需要传入参数而已
[/Quote]

[Quote=引用 11 楼 enihs 的回复:]
恩,权限类应该是实体类的一个属性,然后实体类作为参数传给数据接口
[/Quote]

嗯,我现在的想法也是这样的,把数据接口传递给实体类!
但是这样的设计是不是有问题啊!看上去很不爽的。

而且实体类是需要序列化的,我把这些信息传进去,那么实体类也太庞大了!

目前还有一种思路:
就是把实体类和业务逻辑分开,这样实体类就不需要保存这些信息了(不需要数据接口了)!序列化也就没有问题了。在业务逻辑层,需要传递数据接口!
不知道这种思路行不行!
enihs 2008-10-27
  • 打赏
  • 举报
回复
恩,权限类应该是实体类的一个属性,然后实体类作为参数传给数据接口
  • 打赏
  • 举报
回复
你说的数据接口,用户权限接口,其实也是一个类吧,只是需要传入参数而已
连风 2008-10-27
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 tmxk2002 的回复:]
呵呵,你是说设计类的问题,不是权限的问题撒,你可以将访问数据库作为你的那些实体类的一个公共行为来定义一个接口,然后所有实体类来继承这个接口,这个接口的方法其实就两个read和writer,然后每个实体类实现这个接口,在实现的时候再去调用你定义的那些有权限的数据库接口,不这样行不行。
[/Quote]

对,应该是说设计类的问题!不是权限的问题!可能是我描述的不对!

现在是详细情况是这样的:
1、权限接口已经设计好了,在调用的时候,必须传递用户信息;
2、数据接口已经单独封装好了,在调用的时候,必须传递权限接口;

但是问题是:
我在实现实体类的时候,如何创建数据接口呢?关键是无法得到用户的权限接口啊!
  • 打赏
  • 举报
回复
呵呵,你是说设计类的问题,不是权限的问题撒,你可以将访问数据库作为你的那些实体类的一个公共行为来定义一个接口,然后所有实体类来继承这个接口,这个接口的方法其实就两个read和writer,然后每个实体类实现这个接口,在实现的时候再去调用你定义的那些有权限的数据库接口,不这样行不行。
enihs 2008-10-27
  • 打赏
  • 举报
回复
权限的不一样是对表来说的还是对页面来说的?
连风 2008-10-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 tmxk2002 的回复:]
为什么不在数据库端做限制呢?一种方式是做一张配置表,绑定用户和访问数据表字段的权限,访问数据库时通过验证用户是否定义了访问权限来做限制。另外一张方式就是用户和数据库用户绑定,然后定义数据库用户与数据表以及字段进行权限绑定,不同的用户用不同的数据库用户访问数据库。在代码里做数据库访问权限控制是很难的而且也是很笨的。
[/Quote]

可能是我的意思表达的不明确吧!
我现在的情况是这样的:
1、有很多的实体类,每个实体类都需要访问数据库。
2、访问数据库时,是需要权限的,每个用户的权限不一样。
3、那么在设计实体类时,如果得到访问数据库的接口呢?

我现在的思路:
1、将该数据接口传入实体类,但这种设计太丑了!
2、将该数据接口放在一个静态变量中,实体类只需要到该静态变量中得到数据接口即可。但是在服务器端是多用户的!
NIJIA72 2008-10-27
  • 打赏
  • 举报
回复
帮你顶一下
  • 打赏
  • 举报
回复
为什么不在数据库端做限制呢?一种方式是做一张配置表,绑定用户和访问数据表字段的权限,访问数据库时通过验证用户是否定义了访问权限来做限制。另外一张方式就是用户和数据库用户绑定,然后定义数据库用户与数据表以及字段进行权限绑定,不同的用户用不同的数据库用户访问数据库。在代码里做数据库访问权限控制是很难的而且也是很笨的。
enihs 2008-10-27
  • 打赏
  • 举报
回复
我的理解是实体类应该只有属性,最多再override下ToString(),实现下ICompareable之类,查询访问数据之应用应归于单纯的数据层。
连风 2008-10-27
  • 打赏
  • 举报
回复
现在的问题是,在实体类中,并不知道当前用户信息!要用户信息,我现在只知道两种办法
1、作为参数传递给实体类。这种方式不是我想要的,因为实体类太多了,而且需要序列化,并且这种设计看上去好丑。
2、放在静态变量中。但在服务器上是多用户的,静态变量无法满足啊!
cpio 2008-10-27
  • 打赏
  • 举报
回复
应该做个接口来判断用户是否有调用哪个查询数据接口的权限,每次调用之前可以判断一下是否有权限
CloneCenter 2008-10-27
  • 打赏
  • 举报
回复
没明白楼主的意思,大概猜一下,楼主在服务器端运行的时候,可以指定一个默认用户名来实现。
wangping_li 2008-10-27
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 dqdan 的回复:]
我好像想清楚点了,问题渐渐浮出水名了,我现在是将实体和业务逻辑都放在一个类中了,这样这个类就太庞大了!
如果将设计修改下,不知道行不行?
1、将实体类和业务逻辑分开
2、实体类只负责数据的传输、序列化等。
3、业务逻辑类负责实体类的创建和保存。
4、这样在业务逻辑实例中,就可以保存数据接口了(因为业务逻辑是不需要序列化的)。
[/Quote]
实体类本来就应该和业务逻辑分开才好
加载更多回复(1)

111,097

社区成员

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

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

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