我正在开发一个使用MVC 3(RC2)的CMS应用程序,现在我处于十字路口。如果我提出的方法是适当的,我无法说服自己。我想这是因为我知道我正在试图削减一些角落,这些角落会让我在晚些时候沉重地付出代价。应用程序逻辑(认证/授权的适当位置)
我会马上下来说明我的问题:
1)我有一个资源(可以称其为A),它必须进行编辑。
2)我有一个自定义的权限系统来实现,其具有2(许多)权限:
- 可以编辑自己的资源
- 可以编辑其他资源
3)资源的创造者如果他们有“可以编辑自己的资源”权限,A可以自由编辑。
4)单独的用户只能如果他们有权限编辑“可以编辑其他资源”
现在的需求描述,让我告诉你我的做法至今:
1)I有一个叫做 'ResourceController'
2)我已被称为动作 '修改' 控制器
3)操作有一个属性在其上:[CustomerAuthorize(Perm.CanEditOwnResource,Perm.CanEditOtherResource,不限=真) ]
4)我有一个服务类负责域验证。
因此,如果用户具有“可以编辑自己的资源”或“可以编辑其他资源”权限,则用户可以调用操作方法。
我该如何决定(以及在何处作出此决定)关于用户是否拥有正确的权限(取决于他们是否拥有资源?)如果它在控制器操作中,则在资源服务类中,在一个单独的服务类?
等着听不同意见......
但不是重复的逻辑?重复多次相同的检查?但我理解你的关心。我想知道是否可以看到一些OSS项目来学习这种模式。 – kidoman 2010-12-14 20:01:16
@ KiD0M4N:有些情况下重复某些逻辑比不重复它更容易(包括长期维护考虑)。也就是说,有时候技术限制或现有的设计决策使得追求完全纯粹的“不要重复自己”是不合理的。 – 2010-12-14 20:27:23