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 :  2    Total :   9108



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;
             try
             {
                 SPSecurity.RunWithElevatedPrivileges(delegate()
                     {
                         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.

Categories