ASP.NET MVC: Create Role with ASP.NET Identity
By Tan Lee Published on May 29, 2017 7.23K
Create Role (ApplicationRole, ApplicationRoleManager) with ASP.NET Identity MVC 5 using C#, Entity Framework Code First
Step 1: Open IdentityModels class, then add ApplicationRole class as below
public class ApplicationRole : IdentityRole { public ApplicationRole() : base() { } public ApplicationRole(string roleName) : base(roleName) { } }
Step 2: Open ApplicationRoleManager class, then add ApplicationRoleManager class as below
public class ApplicationRoleManager : RoleManager<ApplicationRole> { public ApplicationRoleManager(IRoleStore<ApplicationRole, string> roleStore) : base(roleStore) { } public static ApplicationRoleManager Create(IdentityFactoryOptions<ApplicationRoleManager> options, IOwinContext context) { var applicationRoleManager = new ApplicationRoleManager(new RoleStore<ApplicationRole>(context.Get<ApplicationDbContext>())); return applicationRoleManager; } }
Step 3: Create a RoleViewModel class to transfer data between view and controller
public class RoleViewModel { public RoleViewModel() { } public RoleViewModel(ApplicationRole role) { Id = role.Id; Name = role.Name; } public string Id { get; set; } public string Name { get; set; } }
Step 4: Create a RoleController as below
public class RoleController : Controller { private ApplicationRoleManager _roleManager; public RoleController() { } public RoleController(ApplicationRoleManager roleManager) { RoleManager = roleManager; } public ApplicationRoleManager RoleManager { get { return _roleManager ?? HttpContext.GetOwinContext().Get<ApplicationRoleManager>(); } private set { _roleManager = value; } } // GET: Role public ActionResult Index() { List<RoleViewModel> list = new List<RoleViewModel>(); foreach (var role in RoleManager.Roles) list.Add(new RoleViewModel(role)); return View(list); } public ActionResult Create() { return View(); } [HttpPost] public async Task<ActionResult> Create(RoleViewModel model) { var role = new ApplicationRole() { Name = model.Name }; await RoleManager.CreateAsync(role); return RedirectToAction("Index"); } public async Task<ActionResult> Edit(string id) { var role = await RoleManager.FindByIdAsync(id); return View(new RoleViewModel(role)); } [HttpPost] public async Task<ActionResult> Edit(RoleViewModel model) { var role = new ApplicationRole() { Id = model.Id, Name = model.Name }; await RoleManager.UpdateAsync(role); return RedirectToAction("Index"); } public async Task<ActionResult> Details(string id) { var role = await RoleManager.FindByIdAsync(id); return View(new RoleViewModel(role)); } public async Task<ActionResult> Delete(string id) { var role = await RoleManager.FindByIdAsync(id); return View(new RoleViewModel(role)); } public async Task<ActionResult> DeleteConfirmed(string id) { var role = await RoleManager.FindByIdAsync(id); await RoleManager.DeleteAsync(role); return RedirectToAction("Index"); } }
Step 5: You can use MVC Razor Template to generate views
Index view
@model IEnumerable<MvcDemo.Models.RoleViewModel> @{ ViewBag.Title = "Index"; } <h2>Index</h2> <p> @Html.ActionLink("Create New", "Create") </p> <table class="table"> <tr> <th> @Html.DisplayNameFor(model => model.Name) </th> <th></th> </tr> @foreach (var item in Model) { <tr> <td> @Html.DisplayFor(modelItem => item.Name) </td> <td> @Html.ActionLink("Edit", "Edit", new { id=item.Id }) | @Html.ActionLink("Details", "Details", new { id=item.Id }) | @Html.ActionLink("Delete", "Delete", new { id=item.Id }) </td> </tr> } </table>
Create view
@model MvcDemo.Models.RoleViewModel @{ ViewBag.Title = "Create"; } <h2>Create</h2> @using (Html.BeginForm()) { @Html.AntiForgeryToken() <div class="form-horizontal"> <h4>RoleViewModel</h4> <hr /> @Html.ValidationSummary(true, "", new { @class = "text-danger" }) <div class="form-group"> @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" }) </div> </div> <div class="form-group"> <div class="col-md-offset-2 col-md-10"> <input type="submit" value="Create" class="btn btn-default" /> </div> </div> </div> } <div> @Html.ActionLink("Back to List", "Index") </div>
Edit view
@model MvcDemo.Models.RoleViewModel @{ ViewBag.Title = "Edit"; } <h2>Edit</h2> @using (Html.BeginForm()) { @Html.AntiForgeryToken() <div class="form-horizontal"> <h4>RoleViewModel</h4> <hr /> @Html.ValidationSummary(true, "", new { @class = "text-danger" }) @Html.HiddenFor(model => model.Id) <div class="form-group"> @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" }) </div> </div> <div class="form-group"> <div class="col-md-offset-2 col-md-10"> <input type="submit" value="Save" class="btn btn-default" /> </div> </div> </div> } <div> @Html.ActionLink("Back to List", "Index") </div>
Delete view
@model MvcDemo.Models.RoleViewModel @{ ViewBag.Title = "Delete"; } <h2>Delete</h2> <h3>Are you sure you want to delete this?</h3> <div> <h4>RoleViewModel</h4> <hr /> <dl class="dl-horizontal"> <dt> @Html.DisplayNameFor(model => model.Name) </dt> <dd> @Html.DisplayFor(model => model.Name) </dd> </dl> @using (Html.BeginForm()) { @Html.AntiForgeryToken() <div class="form-actions no-color"> <input type="submit" value="Delete" class="btn btn-default" /> | @Html.ActionLink("Back to List", "Index") </div> } </div>
Details view
@model MvcDemo.Models.RoleViewModel @{ ViewBag.Title = "Details"; } <h2>Details</h2> <div> <h4>RoleViewModel</h4> <hr /> <dl class="dl-horizontal"> <dt> @Html.DisplayNameFor(model => model.Name) </dt> <dd> @Html.DisplayFor(model => model.Name) </dd> </dl> </div> <p> @Html.ActionLink("Edit", "Edit", new { id = Model.Id }) | @Html.ActionLink("Back to List", "Index") </p>
VIDEO TUTORIALS
- ASP.NET MVC Responsive Templates Free Download
- How to upload file in ASP.NET MVC
- How to Create Contact Form Flat Responsive in ASP.NET MVC
- How to check if HttpPostedFileBase is an image
- How to upload Multiple File in ASP.NET MVC
- ASP.NET MVC: Implement Password Reset with ASP NET Identity
- ASP.NET MVC: Getting Started
- ASP.NET MVC: Create Custom Routes
Categories
Popular Posts
Structured Data using FoxLearn.JsonLd
Jun 20, 2025
Implement security headers for an ASP.NET Core
Jun 24, 2025
Modular Admin Template
Nov 14, 2024
SB Admin Template
Nov 14, 2024
Carpatin Admin Dashboard Template
Nov 15, 2024