4

私はasp.netサイトを持っています..各ページにはいくつかのコンテンツがあり、各ログインユーザーにはいくつかのロールがあります..ログインユーザーロールに基づいてページのコンテンツを非表示および表示したい..どうすればそれを行うことができますか? ありがとう。PS : asp.net の認証および承認フォームについて知っています...私の問題は、ページの内容に関するものです。

また

私が知りたいのは、いくつかの .ascx (ユーザー コントロール) を用意し、それらを .aspx ページに追加することです。次に、可視性プロパティとユーザー ロールに基づいて、aspx ページの一部を非表示および表示します。これが最善の方法ですか? ? ありがとう。

4

2 に答える 2

8

私は最終的に適切な答えを見つけました..可視性プロパティを設定したくありません (そして、推測するのは難しくありません!)、コードが汚れてしまい、便利ではないためです...ページ Default.aspx があり、そこにあるとします。 Default.aspx ページには 3 つの役割があります。ユーザーの役割に基づいてコンテンツを表示したいので、Loginview を使用し、以下に示すようにテンプレートを使用します。

<asp:LoginView runat="server" ID="loginviewControl1">
   <AnonymousTemplate>
        <asp:HyperLink runat="server" ID="lnkLogin" Text="Log In" NavigateUrl="~/Account/Login.aspx"></asp:HyperLink>
   <Anonymous:AnonymousPart ID = "anonym" runat="server" />
   </AnonymousTemplate>
   <LoggedInTemplate>
        <asp:Label runat="server" ID="WelcomeBackMessage"></asp:Label>
    </LoggedInTemplate>
   <RoleGroups>
       <asp:RoleGroup Roles="Admin">
           <ContentTemplate>
               <Admin:AdminPart ID ="adminContent" runat="server" />
           </ContentTemplate>
       </asp:RoleGroup>
       <asp:RoleGroup Roles="A">
           <ContentTemplate>
              <RoleA:RoleAPart ID = "RoleAContent" runat="server"/>
           </ContentTemplate>
       </asp:RoleGroup>
       <asp:RoleGroup Roles="B">
           <ContentTemplate>
             <RoleB:RoleBPart ID = "RoleBContent" runat="server" />
           </ContentTemplate>
       </asp:RoleGroup>
    </RoleGroups>
</asp:LoginView>

RoleB:RoleBPart、RoleA:RoleAPart、Admin:AdminPart

ユーザーコントロールです!ここに私のサーバーサイドがあります..

protected void Page_Load(object sender, EventArgs e)
    {

    }

ときどき扱いづらくなってしまうので、視認性を設定するよりマシだと思います!! ロール A のユーザーがログインすると、表示されるコンテンツは RoleA:RoleAPart の部分だけです。

于 2013-07-22T07:31:27.507 に答える
5

難しすぎるべきではありません: パネル (または仕事をするのに適した他の要素) の役割に基づいて、表示/非表示にするサイトの部分をラップします。あなたのコードビハインドPage_Load(またはPage_Init、それについてはよくわかりません)で、次のようなことを行います

if (Roles.IsUserInRole("rolename")
{
    content.Visible = true;
}
else
{
    content.Visible = false;
}

content は aspx ページのパネルの ID です。上記のコードは、次のように書くこともできます。

content.Visible = Roles.IsUserInRole("rolename");

役割を確認する別の方法は、

User.IsInRole("rolename")

少しきれいに見えるので、実際に私が好んで使用する方法です。Roles.IsUserInRole メソッドを使用して、特定のユーザーが特定の役割を持っているかどうかを確認することもできますが、この状況では関心がありません。

于 2013-07-02T06:37:53.510 に答える