Как я могу проверить более одного состояния вошедшего в систему пользователя? Например, пользователь является автором статьи или принадлежит к определенной роли - PullRequest
2 голосов
/ 02 декабря 2010

У меня есть часть страницы, которую я хочу отображать, только если пользователь, вошедший в систему, удовлетворяет одному из 3 следующих условий:

  1. Он - автор
  2. Он принадлежит роли Editors .
  3. Он принадлежит роли ' Admin '.

Объектная модель содержит свойство с именем AddedBy ( Model.AddedBy )

Как проверить все 3 условия на странице ASP.NET MVC.

Пока я пробовал код ниже

<%if((Page.User.Identity.Name == Model.AddedBy) || 
   (Page.User.IsInRole("Admin")) || 
   (Page.User.IsInRole("Editors"))){%>

   //Display this portion of page... 

<%}%>

Но мой код, похоже, не замечает разницы и продолжает отображать часть html, заключенную внутри кода выше.

Должно быть, я где-то ошибаюсь.

EDIT

HTML-часть, заключенная в коде, содержит такие кнопки, как Удалить статью, Изменить статью, Добавить статью, Разрешить комментарии , ... Таким образом, только автор статьи должен видеть эти кнопки или проверять коробки. За исключением пользователей в роли «Редакторы» или «Администратор» могут также управлять статьями, которые им не принадлежат.

Таким образом, пользователь, получающий доступ к странице, может видеть эту часть, если он (i) автор ИЛИ (ii) принадлежит к роли Редакторы ИЛИ (iii) к Роль администратора .

Спасибо за помощь

1 Ответ

2 голосов
/ 02 декабря 2010

РЕДАКТИРОВАТЬ: После прояснения вопроса ОП кажется, что ИЛИ было условием, которое следует использовать, и что проблема была решена с помощью старой доброй традиционной отладки! Ура! То, что ниже, осталось, поэтому комментарии имеют смысл, но теперь оно не отвечает на измененный вопрос. Хотя, может быть, кому-нибудь еще пригодится ...

Это потому, что вы переходите к условию if, если ЛЮБОЙ из этих условий удовлетворены (вы используете || , то есть ИЛИ ), а не ВСЕ из этих условий (вы хотите использовать && , то есть И ), что ваш вопрос подразумевает, что вы хотите?

Я думаю, это должно дать вам то, что вы хотите:

<%if((Page.User.Identity.Name == Model.AddedBy) && 
   (Page.User.IsInRole("Admin")) && 
   (Page.User.IsInRole("Editors"))){%>

   //Display this portion of page... 

<%}%>

использование одиночного & & будет работать так же хорошо, я думаю, но использование двойного && будет несколько более эффективным, поскольку оно не будет пытаться оценить любые последующие условия, если одно из них окажется ложным (и поэтому было бы целесообразно условие, которое чаще всего ложно в качестве первой проверки в операторе if)

Эта документация должна быть полезной: && Operator и || Оператор

...