1

イントラネット上に Web サイトを構築していますが、ディレクトリの 1 つに、ハードコードされた許可されたユーザーしかアクセスできません。これらは web.config で定義されています。これに似ています。

<location path="admin">
    <system.web>
        <authorization>
            <allow users="user1"/>
            <allow users="user2"/>
            <allow users="user3"/>
            <allow users="user4"/>
            <deny users="*"/>
        </authorization>
    </system.web>
</location> 

私が望むのは、それらのユーザーにのみ表示されるこのディレクトリへのリンクを作成することです...現時点では、リンクを作成するために、Windowsのユーザー名を再確認し、このように再度ハードコーディングしています...

<% 
    if (HttpContext.Current.User.Identity.Name == "user1" ||         
        HttpContext.Current.User.Identity.Name == "user2" ||
        HttpContext.Current.User.Identity.Name == "user3" ||
        HttpContext.Current.User.Identity.Name == "user4")
    {
        Response.Write("<a href='admin/Default.aspx'>Admin Site</a>");
    }   
%>

しかし、私がやりたいのは、webiconfig ファイルからリストを参照して、次のように言うことです。

if (HttpContext.Current.User.Identity.Name == // a user from the web.config list

これは可能ですか?もしそうなら、私を助けてもらえますか...ありがとう

4

1 に答える 1

3

次のように、web.config から承認規則を取得できます。

            AuthorizationSection configSection =
      (AuthorizationSection)ConfigurationManager.GetSection("system.web/authorization");

        var users = new List<string>();

        var rules = configSection.Rules;

        foreach (AuthorizationRule rule in rules)
        {
            if (rule.Action == AuthorizationRuleAction.Allow)
            {
                foreach (string user in rule.Users)
                {
                    if (!users.Contains(user)) users.Add(user);
                }
            }
        }

ただし、ルールの優先順位にも注意を払う必要があります。

于 2012-08-16T16:29:15.357 に答える