我有一个ASP.NET MVC 4
申请。我正在尝试实现一个解决方案,我检查用户是否可以访问视图,如果没有,则显示错误。如果用户可以访问视图,那么我需要检查该用户是否对该视图有read access
或read and edit access
。如果用户具有读访问权限,则只显示正常的详细信息视图,如果读取和编辑访问权限,则用户可以查看详细信息视图或编辑数据。
这样的事情可能吗?我试过查看我在Codeplex上找到的几个入门套件,但是找不到我想要的东西。这将如何实施?如果可能,如果有人知道我可以下载任何样本项目,那么我将不胜感激。我喜欢通过代码工作,我这样学习更多。
我希望这一切都是数据库驱动的。
答案 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)
{
}