2015-08-17 2 views
0

У меня есть веб-приложение ASP.NET MVC 5, и оно работает довольно хорошо.Пароль защищает страницу без использования системы членства

Это сайт с функцией входа в систему, но только для использования администратором (мной). Аутентификация работает с системой членства (Identity), и все в порядке.

В другой руке пользователи (анонимные пользователи) могут создавать сообщения на этом сайте. Когда они создают его, они заполняют поле пароля, и этот пароль связан с сообщением.

Цель состоит в том, чтобы этот пост можно редактировать или удалять только теми, кто знает относительный пароль.

Нет аутентификации (нет файлов cookie), я просто хочу, чтобы страницы редактирования и удаления были защищены паролем.

Вопрос: Как создать мой просмотр и мой контроллер для добавления формы и проверки ее перед отображением защищенного содержимого?

Я потерялся здесь, я не нашел никакой помощи в Интернете, так как этот случай не общался.

Спасибо!

ответ

1

В вашем методе действия редактирования добавьте дополнительный параметр с именем password и получите пароль от пользователя. Затем проверьте правильность пароля, чтобы пользователь мог отредактировать сообщение. В методе post back снова проверьте пароль, и если пароль правильный, примите редактирование. Рассмотрим следующий пример:

public ActionResult Edit(int id, string password) 
{ 
    if(_myPostManager.IsValidPassword(id,password)) 
    { 
     var post=_myPostManager.Get(id); 

     return View(new EditPostViewModel 
      {ID=post.ID, Content=post.Content, Password=password}); 
    } 
    return RedirectToAction("Error"); 
} 

[HttpPost] 
public ActionResult Edit(EditPostViewModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     // double check password 
     if(_myPostManager.IsValidPassword(model.ID,model.Password)) 
     { 
      // save your data to DB 
      return RedirectToAction("Index"); 
     } 
    } 
    return View(model); 
} 

Вид модели:

public EditPostViewModel 
{ 
    public int ID{get;set;} 
    public string Content {get;set;} 
    public string Password {get;set;} 
    // your other members 
} 

и вид:

@model MyNamespace.EditPostViewModel 
// inside your form element add a hidden filed and put password here 
@Html.HiddenFor(model=>model.Password) 
// your other fields 

Вы также можете поместить пароль в сессии вместо передачи для просмотра. Или зашифруйте пароль и отправьте зашифрованный пароль для просмотра.

+0

Спасибо, я взглянул на него, и у меня есть вопрос о методах GET и POST на странице редактирования. Ваше решение работает хорошо, но пароль отправляется с помощью метода GET и отображается в адресной строке. Как вы думаете, хорошим решением могло бы быть то, что действие «Редактировать» просто возвращает форму пароля, а действие EditPost возвращает форму пароля, если пароль неверен, или форму «Редактировать сообщение», если это правильно? –

+0

Я сделал это, и это правильный путь. Это работает, спасибо. –

Смежные вопросы