2017-03-11 5 views
2

こんにちはすべて私はMVC 5のデフォルトのパスワード変更メソッドをリメイクしたいこのメソッドは、管理者のユーザーが彼が望むパスワードを選択することとはまったく同じ現在の機能を持っています。ドロップダウンリストから変更する私は合理的にコーディングすることに新しいし、これは助けを求める良いコミュニティだと言われました。事前にリビジョンmvc5のデフォルトのパスワード変更メソッド

おかげ ボブ

コントローラメソッド

(それに慣れていない人のために以下のコード)

> public async Task<ActionResult> ResetPassword(ResetPasswordViewModel 
> model) 
>   { 
>    if (!ModelState.IsValid) 
>    { 
>     return View(model); 
>    } 
>    var user = await UserManager.FindByNameAsync(model.Email); 
>    if (user == null) 
>    { 
>     // Don't reveal that the user does not exist 
>     return RedirectToAction("ResetPasswordConfirmation", "Account"); 
>    } 
>    var result = await UserManager.ResetPasswordAsync(user.Id, model.Code, model.Password); 
>    if (result.Succeeded) 
>    { 
>     return RedirectToAction("ResetPasswordConfirmation", "Account"); 
>    } 
>    AddErrors(result); 
>    return View(); 
>   } 

ビュー

> <h2>@ViewBag.Title.</h2> 
> 
> @using (Html.BeginForm("ChangePassword", "Manage", FormMethod.Post, 
> new { @class = "form-horizontal", role = "form" })) { 
>  @Html.AntiForgeryToken() 
>  <h4>Change Password Form</h4> 
>  <hr /> 
>  @Html.ValidationSummary("", new { @class = "text-danger" }) 
>  <div class="form-group"> 
>   @Html.LabelFor(m => m.OldPassword, new { @class = "col-md-2 control-label" }) 
>   <div class="col-md-10"> 
>    @Html.PasswordFor(m => m.OldPassword, new { @class = "form-control" }) 
>   </div> 
>  </div> 
>  <div class="form-group"> 
>   @Html.LabelFor(m => m.NewPassword, new { @class = "col-md-2 control-label" }) 
>   <div class="col-md-10"> 
>    @Html.PasswordFor(m => m.NewPassword, new { @class = "form-control" }) 
>   </div> 
>  </div> 
>  <div class="form-group"> 
>   @Html.LabelFor(m => m.ConfirmPassword, new { @class = "col-md-2 control-label" }) 
>   <div class="col-md-10"> 
>    @Html.PasswordFor(m => m.ConfirmPassword, new { @class = "form-control" }) 
>   </div> 
>  </div> 
>  <div class="form-group"> 
>   <div class="col-md-offset-2 col-md-10"> 
>    <input type="submit" value="Change password" class="btn btn-default" /> 
>   </div> 
>  </div> } @section Scripts { 
>  @Scripts.Render("~/bundles/jqueryval") } 

答えて

1

こんにちはボブ、私が知っていますこれは古い質問ですが、私はあなたのアカウントを見ていましたあなたの問題によく合った答えがありました。私がこれをしているときは、次のような管理コントローラを指定します。

このコードは、あなたが望む機能を組み込んだほとんどの管理者ベースのアカウント機能を実行するために使用できます。

管理コントローラ

public class AdminController : Controller 
    { 
     private ApplicationDbContext dbContext; 
     private ApplicationUserManager _userManager; 

     public ApplicationUserManager UserManager 
     { 
      get 
      { 
       return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>(); 
      } 
      private set 
      { 
       _userManager = value; 
      } 
     } 
     public AdminController() 
     { 
      this.dbContext = new ApplicationDbContext(); 
     } 

     [HttpGet] 
     public ActionResult Index() 
     { 
      // Get all users 
      var currentUsers = this.dbContext.Users.ToList(); 

      var model = new AdminIndexModels 
      { 
       Users = currentUsers 
      }; 

      return this.View(model); 
     } 
     [HttpGet] 
     public async Task<ActionResult> EditName(string id) 
     { 
      // Get relevant user 
      var user = await this.UserManager.FindByIdAsync(id); 

      if (user == null) 
      { 
       return this.View("Error"); 
      } 

      var model = new AdminNameModels 
      { 
       Id = user.Id, 
       FullName = user.FullName 
      }; 

      return this.View(model); 
     } 

     [HttpPost] 
     public async Task<ActionResult> EditName(AdminNameModels model) 
     { 
      if (!ModelState.IsValid) 
      { 
       return this.View(model); 
      } 

      var user = await this.UserManager.FindByIdAsync(model.Id); 

      if (user == null) 
      { 
       return this.View("Error"); 
      } 

      user.FirstName = model.FirstName; 
      user.LastName = model.LastName; 
      var result = await this.UserManager.UpdateAsync(user); 

      if (!result.Succeeded) 
      { 
       // Do something with error here 
       return this.View(model); 
      } 

      // Add confirmation message here 
      return this.RedirectToAction("Index"); 
     } 

     [HttpGet] 
     public async Task<ActionResult> EditPassword(string id) 
     { 
      // Get relevant user 
      var user = await this.UserManager.FindByIdAsync(id); 

      if (user == null) 
      { 
       return this.View("Error"); 
      } 

      var model = new AdminPasswordModels 
      { 
       Id = user.Id, 
       FullName = user.FullName 
      }; 

      return this.View(model); 
     } 

     [HttpPost] 
     public async Task<ActionResult> EditPassword(AdminPasswordModels model) 
     { 
      if (!ModelState.IsValid) 
      { 
       return this.View(model); 
      } 

      var user = await this.UserManager.FindByIdAsync(model.Id); 

      if (user == null) 
      { 
       return this.View("Error"); 
      } 

      user.PasswordHash = this.UserManager.PasswordHasher.HashPassword(model.NewPassword); 

      var result = await this.UserManager.UpdateAsync(user); 

      if (!result.Succeeded) 
      { 
       // Do something with error here 
       return this.View(model); 
      } 

      // Add confirmation message here 
      return this.RedirectToAction("Index"); 
     } 

     [HttpGet] 
     public async Task<ActionResult> EditArchived(string id) 
     { 
      // Get relevant user 
      var user = await this.UserManager.FindByIdAsync(id); 

      if (user == null) 
      { 
       return this.View("Error"); 
      } 

      var model = new AdminArchivedModels 
      { 
       Id = user.Id, 
       FullName = user.FullName 
      }; 

      return this.View(model); 
     } 

     [HttpPost] 
     public async Task<ActionResult> EditArchived(AdminArchivedModels model) 
     { 
      if (!ModelState.IsValid) 
      { 
       return this.View(model); 
      } 

      var user = await this.UserManager.FindByIdAsync(model.Id); 

      if (user == null) 
      { 
       return this.View("Error"); 
      } 

      if (user.Archived == true) 
      { 
       user.Archived = false; 
      } 
      else 
      { 
       user.Archived = true; 
      } 
      var result = await this.UserManager.UpdateAsync(user); 

      if (!result.Succeeded) 
      { 
       // Do something with error here 
       return this.View(model); 
      } 

      // Add confirmation message here 
      return this.RedirectToAction("Index"); 
     } 
    } 

AdminArchivedModels

public class AdminArchivedModels 
    { 
     public string Id { get; set; } 

     public string FullName { get; set; } 


     [Required] 
     [Display(Name = "Archived")] 
     public bool Archived { get; set; } 
    } 

AdminIndexModels

public class AdminIndexModels 
    { 
     public AdminIndexModels() 
     { 
      this.Users = new List<ApplicationUser>(); 
     } 

     public List<ApplicationUser> Users { get; set; } 
    } 

AdminNameModels

public class AdminNameModels 
    { 
     public string Id { get; set; } 

     public string FullName { get; set; } 


     [Required] 
     [Display(Name = "First Name")] 
     public string FirstName { get; set; } 

     [Required] 
     [Display(Name = "Last Name")] 
     public string LastName { get; set; } 
    } 

AdminPasswordModels

public class AdminPasswordModels 
    { 
     public string Id { get; set; } 

     public string FullName { get; set; } 


     [Required] 
     [Display(Name = "New Password")] 
     public string NewPassword { get; set; } 
    } 

とビュー

インデックス

@model YOURPROJECT.Models.AdminIndexModels 


@{ 
    ViewBag.Title = "Index"; 
} 
<h2>Users List</h2> 

<table class="table table-striped table-hover"> 
    <tr> 
     <th> 
      User Name 
     </th> 
     <th> 
      Full Name 
     </th> 
     <th> 
      Archived Status 
     </th> 
     <th> 
      Actions 
     </th> 
    </tr> 
    @foreach (var user in Model.Users) 
    { 
     <tr> 
      <td> 
       @user.UserName 
      </td> 
      <td> 
       @user.FullName 
      </td> 
      <td> 
       @user.Archived 
      </td> 
      <td> 
       @Html.ActionLink("Edit Name", "EditName", new { id = user.Id }) | 
       @Html.ActionLink("Edit Password", "EditPassword", new { id = user.Id }) | 
       @Html.ActionLink("Edit Archived", "EditArchived", new { id = user.Id }) 
      </td> 
     </tr> 
    } 
</table> 
<br /> 

EditArchived

@model YOURPROJECT.Models.AdminArchivedModels 

@{ 
    ViewBag.Title = "Edit Archived - " + Model.FullName; 
} 
<h2>Edit Password - @Model.FullName</h2> 

@using (Html.BeginForm("EditArchived", "Admin", FormMethod.Post)) 
{ 
    @Html.HiddenFor(m => m.Id) 

    <div class="row"> 
     <div class="col-md-2"> 
      @Html.LabelFor(m => m.Archived) 
     </div> 
     <div class="col-md-2"> 
      @Html.EditorFor(m => m.Archived) 
      @Html.ValidationMessageFor(m => m.Archived, "", new { @class = "text-danger" }) 
     </div> 
    </div> 
    <br /> 
    <input type="submit" class="btn btn-primary" value="Submit" /> 
} 
<br /> 

@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
} 

ためEditName

@model YOURPROJECT.Models.AdminNameModels 

@{ 
    ViewBag.Title = "Edit Name - " + Model.FullName; 
} 
<h2>Edit Name - @Model.FullName</h2> 

@using (Html.BeginForm("EditName", "Admin", FormMethod.Post)) 
{ 
    @Html.HiddenFor(m => m.Id) 

    <div class="row"> 
     <div class="col-md-2"> 
      @Html.LabelFor(m => m.FirstName) 
     </div> 
     <div class="col-md-2"> 
      @Html.EditorFor(m => m.FirstName) 
      @Html.ValidationMessageFor(m => m.FirstName, "", new { @class = "text-danger" }) 
     </div> 
    </div> 
    <br /> 
    <div class="row"> 
     <div class="col-md-2"> 
      @Html.LabelFor(m => m.LastName) 
     </div> 
     <div class="col-md-2"> 
      @Html.EditorFor(m => m.LastName) 
      @Html.ValidationMessageFor(m => m.LastName, "", new { @class = "text-danger" }) 
     </div> 
    </div> 
    <br /> 
    <input type="submit" class="btn btn-primary" value="Submit" /> 
} 
<br /> 

@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
} 

EditPassword

@model YOURPROJECT.Models.AdminPasswordModels 

@{ 
    ViewBag.Title = "Edit Password - " + Model.FullName; 
} 
<h2>Edit Password - @Model.FullName</h2> 

@using (Html.BeginForm("EditPassword", "Admin", FormMethod.Post)) 
{ 
    @Html.HiddenFor(m => m.Id) 

    <div class="row"> 
     <div class="col-md-2"> 
      @Html.LabelFor(m => m.NewPassword) 
     </div> 
     <div class="col-md-2"> 
      @Html.PasswordFor(m => m.NewPassword) 
      @Html.ValidationMessageFor(m => m.NewPassword, "", new { @class = "text-danger" }) 
     </div> 
    </div> 
    <br /> 
    <input type="submit" class="btn btn-primary" value="Submit" /> 
} 
<br /> 

@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
} 

このコードの目的は、編集用パスワードコードは、管理者ユーザーが

編集名コードはに管理者を許可リストからパスワードすべてのユーザーを編集することができます

三つのことを達成しますユーザーの登録名を変更する

アーカイブされたコードはあなたにとっては役に立たないかもしれませんが、ユーザーがログインするのを防ぐために使用します。

+0

こんにちはKezanub、こんにちはKezanub、私はすでに、この質問を忘れてしまったときにこのプロジェクトを終了しました。あなたが投稿したものは、これを行うための理想的な方法のようです。私は明日それをテストし、あなたに戻ってきます。 – Bob

関連する問題