【发布时间】:2011-02-21 10:56:01
【问题描述】:
我正在寻找一种优雅的模式来解决这个问题:
我的系统中有多个用户角色,对于我的许多控制器操作,我需要处理略有不同的数据。
举个例子
/Users/Edit/1
这允许Moderator 编辑users 的电子邮件地址,但Administrators 可以编辑用户的电子邮件地址和密码。
我想要一个设计来分隔GET 和POST 的两个不同的操作代码位。
目前我想出的解决方案是:
- 在每个方法中切换,但是当我想要在 POST 上使用不同的模型参数时,这并没有真正的帮助:(
- 自定义控制器工厂,从控制器名称和当前用户角色中选择
UsersController_ForModerators和UsersController_ForAdmins而不仅仅是UsersController - 自定义操作调用程序,以与上述类似的方式选择
Edit_ForModerators方法 - 有一个 IUsersController 并在我的 IoC 容器中注册它的不同实现作为基于角色的命名实例
- 在运行时使用 Castle DynamicProxy 构建控制器的实现,并将方法操作为来自基于角色的实现的方法
我更喜欢命名的 IoC 实例路由 atm,因为这意味着我的所有 url/路由都可以无缝运行。
想法?有什么建议吗?
【问题讨论】:
标签: asp.net-mvc design-patterns architecture