【发布时间】:2011-09-08 23:22:34
【问题描述】:
使用 ASP.NET MVC 3 (Razor) 应用程序,主要关注 UGC(用户生成的内容)。
我正在开发一个“问答”区域 - 用户可以在这里提问,其他人可以回答、投票等。
因此,我试图找出一种简洁的方法来处理用户可以在任何给定页面上执行的可用操作,具体取决于他们的角色和其他因素。
以“问题详情页面”为例(如 Stack Overflow 上的这个页面)。
任何(经过身份验证的)用户都可以:
- 为问题/答案投票
- 回答
问题所有者可以:
- 编辑
- 删除
- 标记答案
等等。
现在,我有一个QuestionViewModel,用于显示此特定视图的问题和相关答案。
我使用 AutoMapper 创建它。
如何根据可用的操作在页面上显示“便签”(例如超链接)?
我目前的想法是:
- 我创建了一个枚举:
QuestionOperation(回答、编辑、禁用、投票、回答等) - 我将
IEnumerable<QuestionOperation>类型的属性添加到我的 ViewModel 中 - 我在我的操作方法 (HTTP GET) 中设置了这个属性,检查用户是否经过身份验证以及他们所属的角色。
- 然后我使用编辑器模板将每个操作呈现为超链接,使用
Html.ActionLink
这被认为是一种干净的方法 - 或者任何人都可以提出更好的方法吗?
请记住,我在三个页面上重复使用此 QuestionViewModel:
- 问题详情页面
- “提问”页面
- “编辑问题”页面
因此,由于这些操作依赖于页面/用户,因此 AutoMapper 无法真正完成。
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-3 razor viewmodel user-roles