Аутентификация с помощью форм MVC3: видимые элементы роли в частичном представлении - PullRequest
0 голосов
/ 15 августа 2011

Я только что настроил свое MVC-приложение с аутентификацией по формам, и все просто замечательно, за исключением моего _LogOnPartial представления.«Welcome [Log Off]» работает нормально, однако, у меня также есть специальный текст или выпадающий список для выбора ролей, который должен отображаться в зависимости от роли пользователя.

Это работает нормально, если пользователь имеетвошел в систему во время текущего сеанса, потому что я использую куки-файлы для удержания роли и проверки с помощью User.IsInRole() в контроллере до того, как произойдут какие-либо действия.

Это не работает, если пользователь выбирает «Запомнить меня», потому что, когда сеансзапускается, нет файла cookie, содержащего роль, и, следовательно, видимых элементов.

Есть ли простой способ проверить User.IsInRole() в частичном представлении?

Вот мой вид:

<div id="LogInContainer">
    @if (Request.IsAuthenticated)
    {
        <div class="InLine" id="WelcomeDisplay">
            <text>Welcome <b>@Context.User.Identity.Name</b>! [ @Html.ActionLink("Log Off", "LogOff", "Account")
            ]
            </text>
        </div>
        <div id="clientDropDown">
            @{

        var requestCookie = Request.Cookies["Role"];
        if (requestCookie != null)
        {
            if (requestCookie.Value == "Client1")
            {
                HttpCookie joannCookie = new HttpCookie("Client", "Client1");
                Response.Cookies.Add(Client1Cookie);
                <text>Client: Client1</text>
            }
            else if (requestCookie.Value == "Client2")
            {
                HttpCookie safewayCookie = new HttpCookie("Client", "Client2");
                Response.Cookies.Add(Client2Cookie); 
                <text>Client: Client2</text>
            }
            else if (requestCookie.Value == "Administrator")
            {
                @:Client: @Html.DropDownList("Client", new SelectList(ConfigurationHelper.Clients))
                }
        }
        else
        {
            //Do nothing
        }
            }
        </div>
    }
    else
    {
        <div id="LogOnLink">
            [ @Html.ActionLink("Log On", "LogOn", "Account") ]
        </div>
    }
</div>

Есть ли способ сделать файлы cookie неактивными?Я новичок в файлах cookie, поэтому могу быть просто неосведомленным, но я попробовал поиск в Google безуспешно.

1 Ответ

1 голос
/ 16 августа 2011

Установите срок действия cookie на будущую дату, чтобы сделать его постоянным.Если вы не установите дату истечения срока действия, то это так называемый «сеансовый файл cookie» или «непостоянный» файл cookie, который не сохраняется на диске браузером и сохраняется только до тех пор, пока вы используете тот же сеанс браузера.Если вы хотите сохранить cookie «навсегда», вам все равно нужно выбрать дату, единственное, что вы можете сделать, - это выбрать дату окончания срока действия «достаточно далеко» в будущем (например, текущая дата плюс большой постоянный промежуток времени).

Однако вы должны быть очень осторожны при хранении информации об аутентификации или авторизации в постоянном файле cookie!По умолчанию ASP.NET использует сеансовые куки для аутентификации, потому что сохранение такого куки представляет серьезную угрозу безопасности.

...