在 MVC 4 中限制未登录用户的控制器操作访问

本文关键字:用户 控制器 操作 访问 登录 MVC | 更新日期: 2023-09-27 18:34:42

我对MVC很陌生。我曾经使用经典 ASP.NET(Web表单(。在 Web 窗体中,每当我必须限制某人访问特定的 ASPX 页面时,我都会将它们放在一个特定的文件夹中(我们称之为用户文件夹(,其中包含如下所示的 web.config 文件:

<configuration>
    <system.web>
      <authorization>
        <deny users="?"/>
      </authorization>  
    </system.web>
</configuration>

如果用户未经过身份验证,这基本上会将用户重定向到登录页面......

现在我有一个 MVC 4 应用程序,其中我有所有控制器的文件夹......我将如何限制对控制器内特定操作的访问。让我们称它为UserController,这样每当用户尝试访问该控制器中的这些特定操作时,都会提示他进入登录页面...如果他已经过身份验证,那么他可以访问这些资源...

有人可以帮助我解决这个问题吗?

附言有什么方法可以在他登录时为该用户类型分配特定角色?假设用户类型是"Worker",我不希望除了该用户类型之外的其他人能够访问该角色之外的控制器,当然,如果他们经过身份验证......

在 MVC 4 中限制未登录用户的控制器操作访问

您只需使用 Asp.Net [Authorize]数据注释来限制未登录的用户。 下面的代码是默认代码

[Authorize]
public ActionResult Index()
{
   your code
}

如果希望特定用户访问控制器,则必须使用Roles[Authorize]

[Authorize(Roles = "Admin")]
public ActionResult Index()
{
  your code
}

你可以在这里使用属性。通过属性检查,您可以轻松完成此操作。

这是我的属性类。

 [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited=true, AllowMultiple=true)]
public class AdminAuthorizeAttribute : FilterAttribute, IAuthorizationFilter
{
    private readonly bool _dontValidate;

    public AdminAuthorizeAttribute()
        : this(false)
    {
    }
    public void OnAuthorization(AuthorizationContext filterContext)
    {
        if (IsAdminPageRequested(filterContext))
        {
            if (!this.HasAdminAccess(filterContext))
                this.HandleUnauthorizedRequest(filterContext);
        }
    }
    public virtual bool HasAdminAccess(AuthorizationContext filterContext)
    {
        var permissionService = EngineContext.Current.Resolve<IPermissionService>();
        bool result = permissionService.Authorize(StandardPermissionProvider.AccessAdminPanel);
        return result;
    }
}

这是我的控制器类。

    [AdminAuthorize]
    public class WidgetsLikeController : BasePluginController
    {

或者您可以在操作之前使用它

    [AdminAuthorize]
    public ActionResult AdminLike()
    {
        return View("~/Plugins/Widgets.Like/Views/WidgetsLike/AdminLike.cshtml");
    }

它也将帮助您