Wednesday, March 25, 2015

Get Assigned Roles With LINQ

Here's one way of creating a RadGrid with assigned roles for users. 

   <telerik:RadGrid runat="server" ID="gridUsers" AllowSorting="True"
                   AutoGenerateColumns="False" GroupPanelPosition="Top" 
                   ResolvedRenderMode="Classic"
                   onneeddatasource="gridUsers_NeedDataSource"                     onitemdatabound="gridUsers_ItemDataBound">         <MasterTableView>             <Columns>                 <telerik:GridBoundColumn DataField="userName"                      HeaderText="User Name"                      UniqueName="colUserName">                 </telerik:GridBoundColumn>                 <telerik:GridBoundColumn DataField="roles"                      HeaderText="Roles"                      UniqueName="colRoles">                 </telerik:GridBoundColumn>                 <telerik:GridBoundColumn DataField="isApproved"                      HeaderText="Active User?"                      UniqueName="colIsApproved">                 </telerik:GridBoundColumn>             </Columns>         </MasterTableView>     </telerik:RadGrid>

using System;
using System.Linq;
using System.Web.Security;
using Telerik.Web.UI;

    protected void gridUsers_NeedDataSource(object sender, 
                     Telerik.Web.UI.GridNeedDataSourceEventArgs e)
    {
        try 
        { 
            using (var dc = new  MyModel.EntitiesModel())
            {
                var u = dc.Aspnet_Users.Select(a => new
                {
                    userName = a.UserName,
                    roles = string.Join(","Roles.GetRolesForUser(a.UserName)),
                    isApproved = (Membership.GetUser(a.UserName)).IsApproved
                });
                if (null != u)
                {
                    this.gridUsers.DataSource = u.ToList();
                }
            }
        }
        catch (Exception)
        {
            throw;
        }
    }

    protected void gridUsers_ItemDataBound(object sender, 
                              Telerik.Web.UI.GridItemEventArgs e)
    {
        if (e.Item is GridDataItem)
        {
            GridDataItem dataItem = (GridDataItem)e.Item;
            if (dataItem["colIsApproved"].Text != null &&
dataItem["colIsApproved"].Text == "False")
            {
                dataItem["colIsApproved"].BackColor = System.Drawing.Color.Red;
                dataItem["colIsApproved"].ToolTip = "This person cannot login.";
            }
        }
    }

Tuesday, March 24, 2015




Hiding a Telerik Menu Choice Based on Role

I have my menu in the site master page. I used the Page_Load() function to make the "Admin" menu item only visible to users with an Admin role.

using System;
using System.Linq;
using Telerik.Web.UI;
using System.Web.Security;



<telerik:RadMenu ID="menu" runat="server" RenderMode="Auto"  >
    <Items>
       <telerik:RadMenuItem    Text="Admin"  Visible="true" />
    </Items>
 </telerik:RadMenu>

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        RadMenuItem item = this.menu.FindItemByText("Admin");
        if (null != item)
        {
            if (Roles.IsUserInRole("Admin"))
            {
                item.Visible = true;
            }
            else
            {
                item.Visible = false;
            }
        }
    }
}