Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 使用AspNetSqlRoleProvider在ASP.NET MVC中处理被拒绝的安全性_Asp.net Mvc_Security - Fatal编程技术网

Asp.net mvc 使用AspNetSqlRoleProvider在ASP.NET MVC中处理被拒绝的安全性

Asp.net mvc 使用AspNetSqlRoleProvider在ASP.NET MVC中处理被拒绝的安全性,asp.net-mvc,security,Asp.net Mvc,Security,我希望保护MVC应用程序的不同区域,以防止标准用户访问管理类型视图。当前,如果任何用户登录并尝试查看“关于”页面(VisualStudio中的开箱即用模板),它只会将他们重定向到登录页面。我希望用户被告知他们没有查看页面的权限 [Authorize(Roles="Admin")] public ActionResult About() { return View(); } 当一个已经通过身份验证的用户没有权限时,将其发送到登录页面似乎是多余的。这里是我创建的一个属性,可用于指向未经授权

我希望保护MVC应用程序的不同区域,以防止标准用户访问管理类型视图。当前,如果任何用户登录并尝试查看“关于”页面(VisualStudio中的开箱即用模板),它只会将他们重定向到登录页面。我希望用户被告知他们没有查看页面的权限

[Authorize(Roles="Admin")]
public ActionResult About()
{
    return View();
}

当一个已经通过身份验证的用户没有权限时,将其发送到登录页面似乎是多余的。

这里是我创建的一个属性,可用于指向未经授权的安全操作。它还允许您指定一个原因,该原因将传递给安全控制器上的未授权操作,然后您可以将其用于视图

您可以创建任意数量的属性来自定义它以适合您的特定应用程序,只需确保将其添加到RouteValueDictionary

[AttributeUsage(AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
public sealed class ApplySecurityAttribute : ActionFilterAttribute
{
    private readonly Permission _permission;

    public ApplySecurityAttribute(Permission permission)
        : this(permission, string.Empty) {}

    public ApplySecurityAttribute(Permission permission, string reason)
    {
        _permission = permission
        Reason = reason;
    }

    public string Reason { get; set; }

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (!PermissionsManager.HasPermission(_permission)) // Put security check here
        {
            var routeValueDictionary = new RouteValueDictionary
                                       {
                                           { "controller", "Security" }, // Security Controller
                                           { "action", "Unauthorized" }, // Unauthorized Action
                                           { "reason", Reason }          // Put the reason here
                                       };

            filterContext.Result = new RedirectToRouteResult(routeValueDictionary);
        }

        base.OnActionExecuting(filterContext);
    }
}
这是安全控制器

public class SecurityController : Controller
{
    public ViewResult Unauthorized(string reason)
    {
        var vm = new UnauthorizedViewModel { Reason = reason };

        return View(vm);
    }
}
以下是您希望保护的控制器的属性声明

[ApplySecurity(Permission.CanNuke, Reason = "You are not authorized to nuke!")]
以下是PermissionsManager如何检查用户是否具有权限

public static class PermissionsManager
{
    public static bool HasPermission(EZTracPermission permission)
    {
        return HttpContext.Current.GetCurrentUser().Can(permission);
    }
}