ASP.NET MVC设计问题在何处放置特定用户/“访问级别”代码

时间:2010-01-25 20:55:17

标签: c# .net asp.net-mvc authentication

所以,我已经成功地实现了我自己的MembershipProvider,并且它正如我预期的那样工作。

我用[Authorize]属性修饰了我的控制器动作,这也正如我想的那样工作。

我的问题是,我应该在哪里放置一个代码来确定一个用户有多少访问权限?

[授权]仅表示当前用户是系统的有效用户。当前用户可能具有UserAccess = 1,或2,或4,或8等等。我会在Controller方法中执行此检查吗?或者我应该将用户传递到我的Repository类,并让respository类只返回当前用户有权访问的那些记录?

换句话说,分离这种担忧的最佳方法是什么?因为它与认证有关。我想我应该将用户传递给Repository.GetData()方法,让它执行必要的查找。

此问题的第二部分是如何根据用户限制对特定视图的访问?例如,如果当前用户具有UserAccess = 2,我想省略一些字段,但如果其UserAccess = 4,我想显示所有字段。

更新

经过一番研究后,如果我实现自己的RoleProvider,看起来我可能会一石二鸟 - 我知道如何在控制器[Authorize(Roles = "Admin)]上限制数据访问,它看起来对我来说是最好的选择。我如何使用它来基于角色以不同方式呈现我的视图?我会创建单独的视图并从Controller返回正确的视图吗?或者使用内联C#制作一个视图?

2 个答案:

答案 0 :(得分:1)

问题的第一部分:保持控制器精简并将访问级别代码放入存储库类/模型中。问题的第二部分:您可以为每个访问级别创建不同的视图。或者您可以在视图中放置逻辑来检查用户的访问级别,但这是相当hackish并且不安全。我只是让视图不呈现从模型返回null / empty的任何字段。

答案 1 :(得分:0)

您可以创建自己的AuthorizeAttribute,它接受在参数中执行此操作所需的UserRole。

[CustomAuthorize(UserRole.Administrator)]
public ActionResult YourAction()
{
}