4

在我的控制器中 [Authorized]注释。

我想获取在我的 web.config 文件中设置的授权用户列表。

<add key="authorizedUsers" value="jeff,dan,mindy,claudia"/>

我知道在控制器中您可以执行以下操作:

[Authorize Users="jeff,dan,mindy,claudia"]

但我宁愿只更新 web.config 文件而不必重新编译。无论如何要为我的列表读取 web.config 文件,然后将其添加到[Authorize]属性中?我也为此使用 Windows 身份验证,而不是表单身份验证。

4

2 回答 2

7

您可以实现从 AuthorizeAttribute 继承的自定义 AuthorizeAttribute。

我假设您正在使用 FormAuthentication。否则,它将无法正常工作。

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
public class CustomUserAuthorizeAttribute : AuthorizeAttribute
{
    private string[] _usersSplit
    {
        get
        {
            var authorizedUsers = ConfigurationManager.AppSettings["authorizedUsers"];

            return authorizedUsers.Split(new[] {","}, StringSplitOptions.RemoveEmptyEntries);
        }
    }

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        if (httpContext == null)
            throw new ArgumentNullException("httpContext");
        IPrincipal user = httpContext.User;
        return user.Identity.IsAuthenticated && (_usersSplit.Length <= 0 || Enumerable.Contains(_usersSplit, user.Identity.Name, StringComparer.OrdinalIgnoreCase));
    }
}

用法

[CustomUserAuthorize]
public ActionResult Test()
{
    ViewBag.Message = "Your page.";

    return View();
}

仅供参考:理想情况下,您希望使用基于角色的身份验证,并将它们存储在数据库中。维护起来有点容易。但是,这取决于您的需要。

于 2013-09-26T22:27:19.627 回答
0

你不要那样做。您需要将这些用户设置为角色,然后在 web.config 文件中授予角色访问权限。

<system.web>
  <authorization>
    <allow roles="admin"/>
  </authorization>
</system.web>

你可以这样做;

<authorization>
    <allow users="?"/>
    <deny users="*"/>
</authorization>

但这会打开网站,让潜在的黑客入侵 IMO

于 2013-09-26T21:55:49.923 回答