gpt4 book ai didi

asp.net-mvc - 使用 Asp Net SqlRoleProvider 处理 ASP.NET MVC 中拒绝的安全性

转载 作者:行者123 更新时间:2023-12-03 17:01:09 25 4
gpt4 key购买 nike

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

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

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

最佳答案

这是我创建的一个属性,可用于定向到未经授权的安全操作。它还允许您指定将传递给安全 Controller 上的未授权操作的原因,然后您可以将其用于 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);
}
}

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

return View(vm);
}
}

这是您希望保护的 Controller 上的属性声明
[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);
}
}

关于asp.net-mvc - 使用 Asp Net SqlRoleProvider 处理 ASP.NET MVC 中拒绝的安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2157427/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com