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.
Leave a comment