根据MVC中的角色隐藏表中的列

时间:2011-01-10 17:53:06

标签: asp.net-mvc roles

在Index View中的一些表中,某些角色可以看到更多的表,而不是其他角色。

所以这意味着我应该隐藏一些列

我这样快速而又肮脏:

<% bool codesZichtbaar = Roles.IsUserInRole("Admin") || Roles.IsUserInRole("Algemeen Beheer") || Roles.IsUserInRole("Secretariaat");  %>


<table>
    <tr>
        <th>
        </th>
        <th>
            Adres
        </th>
        <th>
            Instellingsnr.
        </th>
        <% if (codesZichtbaar) { %>
        <th>
            Codes
        </th>
        <%} %>
        <th>
            IKON
        </th>
        <th>
            Datum Van-Tot
        </th>
        <th>
        </th>
    </tr>
    <% foreach (var item in Model) { %>
    <tr class="inst<%: item.actieveSchool?"active":"inactive" %>">
        <td>
            <% Html.RenderPartial("buttons", new MVC2_NASTEST.Models.ButtonDetail() { RouteValues = new { id = item.Inst_ID }, edit = false, details = true, delete = false, takeOptionalsFromUrl = true }); %>
        </td>
        <td>
            <%: item.INST_NAAM%><br />
            <%: item.STRAAT%><br />
            <%: item.POSTCODE%>
            <%: item.GEMEENTE%>
        </td>
        <td>
            <%: item.DOSSNR%>
        </td>
        <% if (codesZichtbaar) { %>
        <td>
            Gebruiker:
            <%: item.Inst_Gebruikersnaam%><br />
            C:
            <%: item.Inst_Concode%><br />
            D:
            <%: item.Inst_DirCode%>
        </td>
        <%} %>
        <td>
            T:
            <%: item.INST_TYPE%><br />
            Inst_REF:
            <%: item.INST_REF%><br />
            Loc_REF:
            <%: item.INST_LOC_REF%><br />
            Loc_Nr:
            <%: item.INST_LOCNR%>
        </td>
        <td>
            <%: String.Format("{0:d}", item.DATUM_VAN)%>
            -
            <%: String.Format("{0:d}", item.DATUM_TOT)%>
        </td>
        <td>
            <a href='<%= Url.Action("Links", "Instelling", MVC2_NASTEST.RouteValues.MergeRouteValues(MVC2_NASTEST.RouteValues.optionalParamters(Request.QueryString), new {id=item.Inst_ID})) %>'
                title="Linken">
                <img src="<%= Url.Content("~/img/link.png") %>" alt="Link" width="16" /></a>
        </td>
    </tr>
    <% } %>
</table>

但这是MVC,我的代码很干,这样做的正确方法是什么?或者,更清洁的方法是什么。

1 个答案:

答案 0 :(得分:4)

我会为此编写一个Html帮助器。它可能看起来像这样:

public bool IsInRole(this HtmlHelper instance, params string[] roles)
{
    var user = html.ViewContext.HttpContext.User;
    foreach(var role in roles)
    {
        if(user.IsInRole(role))
            return true;
    }

    return false;
}

如果用户处于任何提供的角色,则此函数将返回true。你可以这样使用它:

<tr>
    <td>First - Visible to all</td>
    <% if(Html.IsInRole("Admin", "Algemeen Beheer", "Secretariaat")) { %>
        <td>Only for privileged users</td>
    <% } %>
    <td>Last - Visible to all
</tr>

这是一种轻松,干净且可重复使用的方式。