如何检查用户角色是否具有对特定视图的读/写访问权限

时间:2012-10-03 06:14:09

标签: c# asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我有一个ASP.NET MVC 4申请。我正在尝试实现一个解决方案,我检查用户是否可以访问视图,如果没有,则显示错误。如果用户可以访问视图,那么我需要检查该用户是否对该视图有read accessread and edit access。如果用户具有读访问权限,则只显示正常的详细信息视图,如果读取和编辑访问权限,则用户可以查看详细信息视图或编辑数据。

这样的事情可能吗?我试过查看我在Codeplex上找到的几个入门套件,但是找不到我想要的东西。这将如何实施?如果可能,如果有人知道我可以下载任何样本项目,那么我将不胜感激。我喜欢通过代码工作,我这样学习更多。

我希望这一切都是数据库驱动的。

2 个答案:

答案 0 :(得分:1)

您应该更多地了解AuthorizeAttribute以及如何使用角色。基本上,您可以为用户提供角色(可以从数据库中获取),并且对于希望限制应用程序访问的每个视图,您可以将Authorize属性与角色一起添加。默认情况下,我认为您只能限制访问权限或不能访问权限,但您可以覆盖并编写自定义属性,以便为您提供您感兴趣的行为。

或者,您可以管理控制器中的用户权限。由于您知道经过身份验证的用户角色并且可以访问它们,因此您可以在控制器中执行检查并从中创建视图(禁用输入等)。

相关

答案 1 :(得分:0)

正如@Marcus所说,你应该使用属性。当操作开始时,您可以检查用户的角色,他是否有权访问:

public class AttributeForTestAttribute : ActionFilterAttribute
{
    public int RoleCanAccess { get; set; }

    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
          base.OnActionExecuting(filterContext);

          //your validation here..
          //for example:

          if(_currentUser.Role < RoleHasAccess )
          {
            //user has not access to this action, redirect him to home page. 

            filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { { "controller", "Home" }, { "action", "Index" }, { "returnUri", filterContext.HttpContext.Request.RawUrl } });
          }
          else
          {
            // user has access to this action
          }
    }
}

在控制器中使用你的属性:

    [AttributeForTest(RoleHasAccess = 2)]
    public ActionResult SaveProduct(Product product)
    {

    }