Hide Repeater columns based on user privileges

2019-02-23 17:08发布

Can somebody explain to me how to hide a repeater column based on the user privileges.

Say I have:

<asp:Repeater ID="repeater" runat="server>
  <HeaderTemplate>
    <table id="table_id">
      <tr>
        <th>Name</th>
        <th>Secret Info</th>
      <tr>
  </HeaderTemplate>
  <ItemTemplate>
      <tr>
        <td><asp:Label ID="Label1" runat="server" Text='<%# Eval("Name") %>' /></td>
        <td><asp:Label ID="Label1" runat="server" Text='<%# Eval("SecretInfo") %>' /></td>
      <tr>
  <ItemTemplate>
  <AlternatingItemTemplate>
      <tr>
        <td><asp:Label ID="Label1" runat="server" Text='<%# Eval("Name") %>' /></td>
        <td><asp:Label ID="Label1" runat="server" Text='<%# Eval("SecretInfo") %>' /></td>
      <tr>
  <AlternatingItemTemplate>
  <FooterTemplate>
    </table>
  </FooterTemplate>
</asp:Repeater>

How would I only display the 'Secret Info' column to logged on users?

3条回答
唯我独甜
2楼-- · 2019-02-23 17:52

You can render the <td> elements conditionally. This simplified example presumes you have a Page-level property that indicates whether or not the user is logged on (you'll want to do the same thing in the header template):

<asp:Repeater ID="repeater" runat="server>
    <ItemTemplate>
        <tr>
            <td><asp:Label ID="Label1" runat="server" Text='<%# Eval("Name") %>'  /></td>
            <% if (this.UserIsLoggedOn) { %>
            <td><asp:Label ID="Label2" runat="server" Text='<%# Eval("SecretInfo") %>' /></td>
            <% } %>
        <tr>
    </ItemTemplate>
</asp:Repeater>
查看更多
一夜七次
3楼-- · 2019-02-23 17:53

You can use the loginview control which can display controls based on role (including anonymous vs authenticated). You can find a guide here: http://weblogs.asp.net/sukumarraju/archive/2010/07/28/role-based-authorization-using-loginview-control.aspx

So something like:

<asp:Repeater ID="repeater" runat="server>
  <HeaderTemplate>
    <table id="table_id">
      <tr>
        <th>Name</th>
        <asp:LoginView ID="lvwHeader" runat="server">
          <LoggedInTemplate>
            <th>Secret Info</th>
          </LoggedInTemplate>
        </asp:LoginView>
      <tr>
  </HeaderTemplate>
  <ItemTemplate>
      <tr>
        <td><asp:Label ID="Label1" runat="server" Text='<%# Eval("Name") %>' /></td>
        <asp:LoginView ID="lvwItem" runat="server">
          <LoggedInTemplate>
            <td><asp:Label ID="Label1" runat="server" Text='<%# Eval("SecretInfo") %>' /></td>
          </LoggedInTemplate>
        </asp:LoginView>
      <tr>
  <ItemTemplate>
  <AlternatingItemTemplate>
      <tr>
        <td><asp:Label ID="Label1" runat="server" Text='<%# Eval("Name") %>' /></td>
        <asp:LoginView ID="lvwItem" runat="server">
          <LoggedInTemplate>
            <td><asp:Label ID="Label1" runat="server" Text='<%# Eval("SecretInfo") %>' /></td>
          </LoggedInTemplate>
        </asp:LoginView>
      <tr>
  <AlternatingItemTemplate>
  <FooterTemplate>
    </table>
  </FooterTemplate>
</asp:Repeater>
查看更多
不美不萌又怎样
4楼-- · 2019-02-23 18:01

You could do something like the following:

<td><asp:Label ID="Label1" runat="server" Text='<%# Eval("SecretInfo") %>' Visible='<%# IsUserLoggedOn() %>' /></td>

Where IsUserLoggedOn is some function that returns a boolean that is true if the user is logged on

查看更多
登录 后发表回答