I usually do a soft redirect followed by a return so that no more code is executed on the current request. A soft redirect that allows further code execution on the current request should be avoided. At one time in the past a community member did a bunch of little refactorings and added those redirect methods on SiteUtils but I generally don't use them becuase he misunderstood my original code when he refactored it and some of those methods allow the code on the first request to continue.
The benefit of a soft redirect is it can avoid threadabort exceptions that can happen with hard redirects, but they should be used carefully in a way that makes sure the execution stops on the current request.
So the typical pattern you will see me using in an edit page is in page load event I'll check if the user has permission and if not I'll do a soft redirect followed by return so that no further code is executed like this:
if (!UserCanEditModule(moduleId, Gallery.FeatureGuid))
{
SiteUtils.RedirectToAccessDeniedPage(this);
return;
}
but in any case where a return would not prevent further execution I would just do a hard redirect with Response.Redirect
Hope that helps,
Joe