所以,我已经成功地实现了我自己的MembershipProvider,并且它正如我预期的那样工作。
我用[Authorize]属性修饰了我的控制器动作,这也正如我想的那样工作。
我的问题是,我应该在哪里放置一个代码来确定一个用户有多少访问权限?
[授权]仅表示当前用户是系统的有效用户。当前用户可能具有UserAccess = 1,或2,或4,或8等等。我会在Controller方法中执行此检查吗?或者我应该将用户传递到我的Repository类,并让respository类只返回当前用户有权访问的那些记录?
换句话说,分离这种担忧的最佳方法是什么?因为它与认证有关。我想我应该将用户传递给Repository.GetData()方法,让它执行必要的查找。
此问题的第二部分是如何根据用户限制对特定视图的访问?例如,如果当前用户具有UserAccess = 2,我想省略一些字段,但如果其UserAccess = 4,我想显示所有字段。
更新
经过一番研究后,如果我实现自己的RoleProvider,看起来我可能会一石二鸟 - 我知道如何在控制器[Authorize(Roles = "Admin)]
上限制数据访问,它看起来对我来说是最好的选择。我如何使用它来基于角色以不同方式呈现我的视图?我会创建单独的视图并从Controller返回正确的视图吗?或者使用内联C#制作一个视图?
答案 0 :(得分:1)
问题的第一部分:保持控制器精简并将访问级别代码放入存储库类/模型中。问题的第二部分:您可以为每个访问级别创建不同的视图。或者您可以在视图中放置逻辑来检查用户的访问级别,但这是相当hackish并且不安全。我只是让视图不呈现从模型返回null / empty的任何字段。
答案 1 :(得分:0)
您可以创建自己的AuthorizeAttribute,它接受在参数中执行此操作所需的UserRole。
[CustomAuthorize(UserRole.Administrator)]
public ActionResult YourAction()
{
}