Visa innehåll för viss grupp av användare

Dags att fortsätta mitt förra inlägg där jag inledde några förändringar av en ItemTemplate i en ListView-kontroll. Anledningen till att jag valt just ListView-kontrollen, som är ny i Asp.NET 3.5, är att jag behöver en kontroll som kan loopa ut inläggen på anslagstavlan, vilket en Repeater kan klara av. Men jag vill också erbjuda möjligheten att ta bort ett inlägg genom att visa en ta-bort-knapp i anslutning till varje inlägg. Visst hade jag kunnat fixa det i en Repeater med en knapp vars click-event jag själv hanterar men med hjälp av ListView-kontrollen kan jag hooka in på SqlDataSource-kontrollens deletecommand vilket förstås är smidigare.

Men det var egentligen inte det jag skulle skriva om utan nu ska vi kika på punkt 2 från föregeånde inlägg; Hur dölja ta-bort-knappen för alla användare utom administratörer? Eftersom jag använder mig av Asp.NET:s inbyggda Membership och Role-hantering är det relativt enkelt. Är du inte så inläst på det föreslår jag ett besök på The Copy Paste Projects avdelning om Membership, som beskriver grunderna. Tack vare kontrollen LoginView kan man visa upp olika innehåll beroende på vilken Roll en användare tillhör. Så genom att omsluta Ta-bortknappen med en LoginView-kontroll enligt följande så är problemet löst:

   <ItemTemplate>
       <div class="item">
           <div class="icon"><img src="../images/icon_board.png" /></div>
           <span class="credit">
               <asp:Label ID="authorNameLabel" runat="server" Text='<%# Bind("authorName") %>' />
               <br />
               <asp:Label ID="dateLabel" runat="server" Text='<%# Bind("timeStamp", "{0:d}") %>' />
               <asp:Label ID="timeLabel" runat="server" Text='<%# Bind("timeStamp", "{0:t}") %>' />
           </span>
           <br />
           <asp:Label ID="messageLabel" runat="server" Text='<%# Bind("message") %>' />
           <asp:LoginView ID="LoginView1" runat="server">
               <RoleGroups>
                   <asp:RoleGroup Roles="Admin">
                       <ContentTemplate>
                           <br />
                           <asp:Button ID="DeleteButton" runat="server" CausesValidation="False" CommandName="Delete" Text="Ta bort" />
                       </ContentTemplate>
                   </asp:RoleGroup>
               </RoleGroups>                                
           </asp:LoginView>
       </div>
   </ItemTemplate>

LoginView-kontrollen kan också användas för att visa ett innehåll för användare som inte är inloggad och ett annat innehåll för den som är inloggad;

        <asp:LoginView ID="LoginView1" runat="server">
            <AnonymousTemplate>
                Du är inte inloggad.
            </AnonymousTemplate>
            <LoggedInTemplate>
                Du är inloggad.
            </LoggedInTemplate>
        </asp:LoginView>

Men utöver dessa två templates finns alltså också RoleGroups-egenskapen som är en collection av RoleGroup-objekt. Varje RoleGroup-objekt har två egenskaper, Roles och ContentTemplate. Roles är ett attribut där du skriver in den eller de roller du vill att det här objektets ContentTemplate ska visas för. Om du anger flera roller skriver du dem kommaseparerade. I ContentTemplate-elementet kan du sedan fylla på med precis vad som helst som du vill ska visas just för den valda användarrollen.

No comments :

Post a Comment