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 に答える