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