2010-01-25 72 views
4

因此,我已经成功实现了自己的MembershipProvider,并且完全按照我的意图工作。ASP.NET MVC设计问题何处放置特定用户/“访问级别”代码

我已经用[Authorize]属性来装饰我的控制器动作,并且这也是完全按照我的意愿工作的。

我的问题是,我应该在哪里放置代码来确定“使用多少”访问权限?

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

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

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

更新

多一点点的研究之后,它看起来像我可能会一举两得,如果我实现我自己的RoleProvider - 我看我怎么能做到这一点,限制数据访问在控制器[Authorize(Roles = "Admin)]上,它看起来对我来说是最好的选择。我如何使用它来根据角色呈现不同的视图?我会制作独立的视图并从控制器返回正确的视图吗?或者用一个在线C#做一个视图?

回答

1

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

+0

这就是我在想,控制器尽可能的精益。 – Nate 2010-01-25 21:19:04

0

您可以创建自己的AuthorizeAttribute,该参数需要UserRole在参数中执行此操作。

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