【问题标题】:How to check if user role has read/write access to a specific view如何检查用户角色是否对特定视图具有读/写权限
【发布时间】:2012-10-03 06:14:08
【问题描述】:

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

这样的事情可能吗?我曾尝试浏览我在 Codeplex 上找到的几个入门工具包,但找不到我想要的东西。这将如何实施?如果可能的话,如果有人知道我可以下载的任何示例项目,那么我将不胜感激。我喜欢编写代码,我通过这种方式学习更多。

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

【问题讨论】:

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


    【解决方案1】:

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

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

    相关

    【讨论】:

      【解决方案2】:

      正如@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)
          {
      
          }
      

      【讨论】:

        猜你喜欢
        • 2016-04-23
        • 1970-01-01
        • 2010-12-22
        • 2019-06-16
        • 2021-10-25
        • 1970-01-01
        • 2021-10-10
        • 1970-01-01
        相关资源
        最近更新 更多