设计问题,高手解决。分不够另外再加。

leonlux 2004-11-19 12:21:53
我现在在做一个网站的新闻管理系统,其中管理员可以动态赋予不同的权限,分别进行不同的数据库操作。
BaseTransaction类是所有数据库操作类的基类,有Excute()方法,所有数据库操作都从这里继承,覆盖Excute()方法。(Command模式)
用User类表示用户,其中有Excute(BaseTransaction bt)方法,传入不同的数据库操作类的实例后,执行不同的操作。
现在有个权限判断的问题。因为每个用户有不同的权限,权限信息保存在User类中,那么在执行操作的时候是用User类来判断权限,还是在BaseTransaction放一个User的引用,让BaseTransaction来判断权限,或是还有什么更好的设计方案?
...全文
183 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
leonlux 2004-11-20
  • 打赏
  • 举报
回复
但是不同的数据库操作(Transaction)有不同的权限判断需求,难道要为每一个BaseTransaction的子类附加一个判断权限的类?
wdtclv 2004-11-20
  • 打赏
  • 举报
回复
还是用session来判断吧,那样比较简单
如果分要在类中判断觉得应该创建一个新的类继承于user,然后通过授权分配给用户权限
msdn上有类似的例子可以参考一下
hivak47 2004-11-20
  • 打赏
  • 举报
回复
在User类中不应该有权限的信息,应该独立成新的类,像 qiume(杜克[在Coder和Designer之间徘徊]) 的那样。
leonlux 2004-11-20
  • 打赏
  • 举报
回复
我已经找到合适的方法了,谢谢各位。
popsky 2004-11-19
  • 打赏
  • 举报
回复
还是在User类里完成这个判断,这样的BaseTransaction显得相对独立。而本来此功能就是和User相关,因此,这个逻辑应该封装在User类里
jiezhi 2004-11-19
  • 打赏
  • 举报
回复
关于AOP(面向方面编程)你可以查一些资料
有现成的框架aspect#
jiezhi 2004-11-19
  • 打赏
  • 举报
回复
使用Session或者别的什么,告知服务器端当前是什么用户在操作,然后使用AOP做一个拦截器,拦截到这些需要控制的操作,进行验证,合法的,则让其继续执行。
_jfeng 2004-11-19
  • 打赏
  • 举报
回复
帮您顶
SimerJoe 2004-11-19
  • 打赏
  • 举报
回复
但不必封装所有数据库操作吧?
SimerJoe 2004-11-19
  • 打赏
  • 举报
回复
为了保持灵活性,恐怕需要另外建一个类来判断权限了。
leonlux 2004-11-19
  • 打赏
  • 举报
回复
to ralphvsclark(微笑):用户的权限是动态加载的,例如可以在页面上直接创造一个新的用户,用户的权限可以在网页上选择。

to qiume(杜克[在Coder和Designer之间徘徊]) 如果用权限类来进行操作和常理有点相冲突吧,感觉上很别扭,使用起来也不直观。

我现在想了个方法,新建一个NewsManage类,在里面封装所有对数据库的操作(添加新闻、删除新闻等等),实为操作各个BaseTransaction的子类的实例,同时在每个操作里面进行权限的判断,这样如何?
qiume 2004-11-19
  • 打赏
  • 举报
回复
现在有个权限判断的问题。因为每个用户有不同的权限,权限信息保存在User类中,那么在执行操作的时候是用User类来判断权限,还是在BaseTransaction放一个User的引用,让BaseTransaction来判断权限,或是还有什么更好的设计方案?

//
权限信息不应该保存在User类中,而应该把权限信息(权限类)独立出来,权限信息(权限类)里包含
User类的标示(比如ID),同时应该包含可执行的操作BaseTransaction的操作,用权限信息(权限类)]
实现BaseTransaction权限的判断。
ralphvsclark 2004-11-19
  • 打赏
  • 举报
回复
sorry,继承
ralphvsclark 2004-11-19
  • 打赏
  • 举报
回复
建一个通用User类,然后集成几个User类用来实现不同的权限不就可以了
riyue80 2004-11-19
  • 打赏
  • 举报
回复
关注,帮你顶一下:-)
leonlux 2004-11-19
  • 打赏
  • 举报
回复
我开始也是这样在User里做的权限判断,但是每种数据库操作的在权限判断上差异很大,比如搜索和添加就可能需要不同的信息,搜索我可能让他只搜索特定的某类新闻,添加也只能添加某一板块的新闻。所以单纯的用User来判断显得很不灵活。但是如果放到BaseTransaction中的话好象又违反了单一职责原则。如何权衡?
另外对AOP我还不是太了解,恐怕在最近也没有时间去了解,所以只能希望用传统的方法来解决了,还是谢谢jiezhi(風依舊)

110,534

社区成员

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

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

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