Как получить ссылку на защищенную страницу и перенаправить пользователя на страницу входа? - PullRequest
2 голосов
/ 13 июля 2011

На моем сайте Sitecore мне нужна страница, доступная только для авторизованных пользователей.Я разрешил чтение и наследование для роли, которую я хочу, и запретил чтение и наследование для экстрасети \ анонимный.Элемент является частью группы, где другие элементы не защищены.Этот список элементов связан с данными и отображается в виде навигационных ссылок на сайте.

var id = new Sitecore.Data.ID("<guid here>");
var item = Sitecore.Context.Database.GetItem(id);

// protected item is not part of Children collection when user is anon.
this.navrepeater.DataSource = item.Children; 
this.navrepeater.DataBind();

Когда я вошел в систему, отображается ссылка на защищенный элемент, и я могу просмотреть страницу.Когда я не вошел в систему (работает как экстрасеть \ анонимно), ссылка вообще не отображается.Когда я иду URL напрямую, я получаю ошибку 403.В моем файле web.config я установил атрибут loginPage на узле site, но я не перенаправлен.

<site name="mysite" ... loginpage="/login.aspx" />

Итак,

  1. Как отобразить ссылку на защищенную страницу для анонимных пользователей

  2. Как заставить sitecore перенаправить пользователя на страницу входа при необходимости

1 Ответ

3 голосов
/ 13 июля 2011

1) Вы можете обернуть код, который получает элементы для навигационных ссылок в SecurityDisabler, чтобы показать ссылку, даже если они не могут просмотреть страницу:

using(new SecurityDisabler()) { // this bypasses any security
  this.navrepeater.DataSource = item.GetChildren(); // note that the Children property is deprecated, use the GetChildren() method instead
}

2) Если высделайте код вашей страницы наследником класса от Sitecore.Shell.Web.UI.SecurePage, он обработает проверку и перенаправит вас на страницу входа.Кодирование не требуется.

...