How to get the Target Audience Groups of Logged-In User Programmatically in SharePoint 2013

Sathish Nadarajan
SharePoint MVP
Published On :   18 Apr 2015
Visit Count
Today :  1    Total :   10676

In one of the requirement, I need to frame the Search Query based on the Target Audience Groups the current user belongs to. To achieve that, I had come up with the below method.

 public static string GetCurrentUserAudienceGroup(string publishingSiteURL, string loginName)
             AcenetLogger.LogMessage("Entering into the Method GetCurrentUserAudienceGroup", "CommonHelper", null);
             string audienceGroups = string.Empty;
                         using (SPSite site = new SPSite(publishingSiteURL))
                             SPWeb web = site.RootWeb;
                             Microsoft.Office.Server.ServerContext context = Microsoft.Office.Server.ServerContext.GetContext(site);
                             AudienceManager audManager = new AudienceManager(context);
                             AudienceCollection audiences = audManager.Audiences;
                             for (int i = 0; i < audiences.Count; i++)
                                 if (audiences[i].IsMember(loginName))
                                     audienceGroups = audienceGroups + "," + audiences[i].AudienceID;
             catch (Exception ex)
                 Logger.LogException("Error has occured On the Method”);
                 audienceGroups = string.Empty;
             return audienceGroups.TrimStart(',');

The method is very much self-explanatory. Even then, the pseudo code as follows.

· With the elevated previleges, get the SP Site object

· Get the Server Context object by using the site Object

· With the Context object, instantiate the AudienceManager Object

· With that, get the Audiences.

· Iterate through the Audiences groups and make sure that the current Logon User is a Member.

Here, even I thought of eliminating the ‘for’ loop. But I could not find out any other optimum way.

Hope this helps…

Happy Coding,

Sathish Nadarajan.