如何根据当前用户的角色隐藏WebGrid列?

时间:2011-03-01 21:26:34

标签: asp.net-mvc-3 webgrid

我需要使用webgrid做一个网格,我想根据用户角色隐藏编辑动作的列(标题和项目)。

我怎么能用webgrid做到这一点?

1 个答案:

答案 0 :(得分:2)

您可以编写一个帮助方法,该方法将根据用户角色动态生成列:

public static class GridExtensions
{
    public static WebGridColumn[] RoleBasedColumns(
        this HtmlHelper htmlHelper, 
        WebGrid grid
    )
    {
        var user = htmlHelper.ViewContext.HttpContext.User;
        var columns = new List<WebGridColumn>();

        // The Prop1 column would be visible to all users
        columns.Add(grid.Column("Prop1"));

        if (user.IsInRole("foo"))
        {
            // The Prop2 column would be visible only to users
            // in the foo role
            columns.Add(grid.Column("Prop2"));
        }
        return columns.ToArray();
    }
}

然后在你看来:

@{
    var grid = new WebGrid(Model);
}
@grid.GetHtml(columns: grid.Columns(Html.RoleBasedColumns(grid)))