ASP.NET MVC View - Показать что-то основанное на авторизации - PullRequest
2 голосов
/ 26 марта 2009

Извините, если вы обнаружили, что я задаю глупые вопросы. Но я новичок в asp.net и столкнулся с проблемой:

Я пишу простой блог для изучения asp.mvc и хочу отобразить ссылку «Изменить» рядом с названием блога, если пользователь вошел в систему. В настоящее время я должен добавить объект currentUser в Model и проверить IsLogged свойства, чтобы решить, должен ли я отображать ссылку Изменить или нет. Проблема в том, что если вошедшего в систему пользователя нет, мне нужно создать поддельного currentUser, чтобы вставить его в Model, чтобы он работал. Спрашивается, есть ли другой элегантный способ сделать это? Например, мы можем использовать атрибут [Authorize] в контроллере, чтобы разрешить доступ к действию или нет. Есть ли подобный способ подать заявку на просмотр?

Ответы [ 2 ]

3 голосов
/ 26 марта 2009

Если вы используете проверку подлинности с помощью форм, это свойство уже существует в объекте Запрос :

Request.IsAuthenticated

По вашему мнению, вы можете решить свою проблему, выполнив что-то вроде этого:

<%  if(this.Request.IsAuthenticated)
    {
%>
    <%= Html.ActionLink("Edit", url - to - action) %>
<%  }
%>

Но я думаю, что реальная проблема заключается в проверке того, что текущий пользователь является тем, кто может редактировать текущий блог. В этом случае вы можете использовать метод расширения CanEdit для объекта ViewPage :

<%  if(this.CanEdit(this.User))
    {
%>
    <%= Html.ActionLink("Edit", url - to - action) %>
<%  }
%>

Расширение будет выглядеть примерно так:

public static class ViewExtensions
{
    public static bool CanEdit(ViewPage view, MyUser user)
    {
        bool retour = false;

        if(principal != null)
        {
            // get your blog from the view
            Blog blog = view.ViewData["myBlog"];
            // check if the principal is the owner
            retour = (blog.Owner.Id == user.Id);
        }
        return retour;
    }
}
0 голосов
/ 26 марта 2009

Сделайте IsLoggedIn логическим свойством модели . Таким образом, вы можете иметь CurrentUser равным null, когда IsLoggedIn равно false. Ваше мнение проверит IsLoggedIn и никогда не вызовет ничего на CurrentUser, если это false. Таким образом, NullReferenceException обойдется.

Вы также можете полностью исключить свойство IsLoggedIn и проверить, вошел ли пользователь в систему напрямую, используя CurrentUser != null.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...