We needed the basic ability to redirect specific users to a different page. I first took a look at Adam Buenz excellent Redirection web part but we thought that it might be a little bit complex for our content authors to use, so I put together a really simple web part that gives the user the ability to select the users or groups via the standard SharePoint people picker interface.
The idea is that you can select a number of groups or users to apply the redirection to, this could be as broad as all authenticated users or refined to a single user. Of course you need a way edit the web part, so another people picker dialog allows the user to select users or groups that this redirect does not apply to. If they match the exclusion, the web part will present them with the text ‘This account was excluded from redirection to <url>’. This exclusion group is normally the content authors.
It is possible to put a number of these web parts on the same page, so if for example you wanted to redirect to a number of different sites based on AD group or user accounts, this should work fine.
First step, as always is to add the solution to SharePoint, once the solution is deployed, be sure to activate the ‘Redirector web part’ feature at the site level:
Once that is done, it’s just a matter of selecting the ‘Redirect web part’ from the web part gallery:
Hopefully you’ll find some use for it. The source code can be downloaded here and the WSP can be found here.
The code for this web part is fairly straight forward, I have a tool part that uses the SharePoint PeopleEditor control. This control has a property to return the selection of groups or accounts as a comma separated string. With this string I can then do a search to see if the current user is in the group like:
private bool IsUserIn(string commaSeperatedList) { bool isMatch = false; if (commaSeperatedList != string.Empty) { foreach (string group in commaSeperatedList.Split(',')) { if (Page.User.IsInRole(group) || Page.User.Identity.Name == group) { isMatch = true; } } } return isMatch; }
So the web parts main logic looks like:
bool redirectMatch = false; bool exclusionMatch = false; redirectMatch = IsUserIn(selectedADVal); exclusionMatch = IsUserIn(excludeADVal); if (redirectMatch == true && exclusionMatch == false) { Page.Response.Redirect( redirectUrl); } else { if (redirectMatch) { outputCtrl.Text = "This account was excluded from redirection to " + redirectUrl; } }