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