1

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

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

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

4

2 回答 2

1

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

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

有关的

于 2012-10-03T06:59:21.477 回答
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)
    {

    }
于 2014-02-13T09:18:52.020 回答