From aad682be3e0186aa29226a8263199b6b511b9bd4 Mon Sep 17 00:00:00 2001 From: "ani_konarcheva@abv.bg" Date: Fri, 1 Apr 2022 16:30:44 +0300 Subject: [PATCH] register --- ...0220328141658_InitialMigration.Designer.cs | 411 ------------------ .../Data/Migrations/20220329101121_initial.cs | 17 - ....cs => 20220401132719_initial.Designer.cs} | 5 +- ...Migration.cs => 20220401132719_initial.cs} | 3 +- .../RentACarDbContextModelSnapshot.cs | 3 + RentACar/Data/Models/User.cs | 2 + .../Areas/Identity/Pages/Account/Login.cshtml | 6 +- .../Identity/Pages/Account/Login.cshtml.cs | 5 +- .../Identity/Pages/Account/Register.cshtml | 30 ++ .../Identity/Pages/Account/Register.cshtml.cs | 47 +- RentACar/WebApp/Controllers/HomeController.cs | 5 + RentACar/WebApp/Startup.cs | 42 +- RentACar/WebApp/Views/Cars/Index.cshtml | 61 +-- RentACar/WebApp/Views/Shared/_Layout.cshtml | 9 + 14 files changed, 164 insertions(+), 482 deletions(-) delete mode 100644 RentACar/Data/Migrations/20220328141658_InitialMigration.Designer.cs delete mode 100644 RentACar/Data/Migrations/20220329101121_initial.cs rename RentACar/Data/Migrations/{20220329101121_initial.Designer.cs => 20220401132719_initial.Designer.cs} (99%) rename RentACar/Data/Migrations/{20220328141658_InitialMigration.cs => 20220401132719_initial.cs} (99%) diff --git a/RentACar/Data/Migrations/20220328141658_InitialMigration.Designer.cs b/RentACar/Data/Migrations/20220328141658_InitialMigration.Designer.cs deleted file mode 100644 index 9273e33..0000000 --- a/RentACar/Data/Migrations/20220328141658_InitialMigration.Designer.cs +++ /dev/null @@ -1,411 +0,0 @@ -// -using System; -using Data; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -namespace Data.Migrations -{ - [DbContext(typeof(RentACarDbContext))] - [Migration("20220328141658_InitialMigration")] - partial class InitialMigration - { - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("Relational:MaxIdentifierLength", 128) - .HasAnnotation("ProductVersion", "5.0.13") - .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); - - modelBuilder.Entity("Data.Entities.Car", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int") - .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); - - b.Property("Brand") - .HasColumnType("nvarchar(max)"); - - b.Property("CountPassengerSeats") - .HasColumnType("int"); - - b.Property("Description") - .HasColumnType("nvarchar(max)"); - - b.Property("Model") - .HasColumnType("nvarchar(max)"); - - b.Property("PriceForDay") - .HasColumnType("decimal(18,2)"); - - b.Property("Year") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.ToTable("Cars"); - }); - - modelBuilder.Entity("Data.Entities.Rents", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int") - .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); - - b.Property("CarId") - .HasColumnType("int"); - - b.Property("EndDate") - .HasColumnType("datetime2"); - - b.Property("StartDate") - .HasColumnType("datetime2"); - - b.Property("UserId") - .HasColumnType("nvarchar(450)"); - - b.HasKey("Id"); - - b.HasIndex("CarId"); - - b.HasIndex("UserId"); - - b.ToTable("Rents"); - }); - - modelBuilder.Entity("Data.Entities.User", b => - { - b.Property("Id") - .HasColumnType("nvarchar(450)"); - - b.Property("AccessFailedCount") - .HasColumnType("int"); - - b.Property("ConcurrencyStamp") - .HasColumnType("nvarchar(max)"); - - b.Property("Email") - .HasColumnType("nvarchar(max)"); - - b.Property("EmailConfirmed") - .HasColumnType("bit"); - - b.Property("FirstName") - .HasColumnType("nvarchar(max)"); - - b.Property("LastName") - .HasColumnType("nvarchar(max)"); - - b.Property("LockoutEnabled") - .HasColumnType("bit"); - - b.Property("LockoutEnd") - .HasColumnType("datetimeoffset"); - - b.Property("NormalizedEmail") - .HasColumnType("nvarchar(max)"); - - b.Property("NormalizedUserName") - .HasColumnType("nvarchar(max)"); - - b.Property("PasswordHash") - .HasColumnType("nvarchar(max)"); - - b.Property("PersonalNumber") - .HasColumnType("nvarchar(max)"); - - b.Property("PhoneNumber") - .HasColumnType("nvarchar(max)"); - - b.Property("PhoneNumberConfirmed") - .HasColumnType("bit"); - - b.Property("SecurityStamp") - .HasColumnType("nvarchar(max)"); - - b.Property("TwoFactorEnabled") - .HasColumnType("bit"); - - b.Property("UserName") - .HasColumnType("nvarchar(450)"); - - b.HasKey("Id"); - - b.HasIndex("UserName") - .IsUnique() - .HasFilter("[UserName] IS NOT NULL"); - - b.ToTable("User"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => - { - b.Property("Id") - .HasColumnType("nvarchar(450)"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("nvarchar(max)"); - - b.Property("Name") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("NormalizedName") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedName") - .IsUnique() - .HasDatabaseName("RoleNameIndex") - .HasFilter("[NormalizedName] IS NOT NULL"); - - b.ToTable("AspNetRoles"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int") - .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); - - b.Property("ClaimType") - .HasColumnType("nvarchar(max)"); - - b.Property("ClaimValue") - .HasColumnType("nvarchar(max)"); - - b.Property("RoleId") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.HasKey("Id"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetRoleClaims"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUser", b => - { - b.Property("Id") - .HasColumnType("nvarchar(450)"); - - b.Property("AccessFailedCount") - .HasColumnType("int"); - - b.Property("ConcurrencyStamp") - .IsConcurrencyToken() - .HasColumnType("nvarchar(max)"); - - b.Property("Email") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("EmailConfirmed") - .HasColumnType("bit"); - - b.Property("LockoutEnabled") - .HasColumnType("bit"); - - b.Property("LockoutEnd") - .HasColumnType("datetimeoffset"); - - b.Property("NormalizedEmail") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("NormalizedUserName") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.Property("PasswordHash") - .HasColumnType("nvarchar(max)"); - - b.Property("PhoneNumber") - .HasColumnType("nvarchar(max)"); - - b.Property("PhoneNumberConfirmed") - .HasColumnType("bit"); - - b.Property("SecurityStamp") - .HasColumnType("nvarchar(max)"); - - b.Property("TwoFactorEnabled") - .HasColumnType("bit"); - - b.Property("UserName") - .HasMaxLength(256) - .HasColumnType("nvarchar(256)"); - - b.HasKey("Id"); - - b.HasIndex("NormalizedEmail") - .HasDatabaseName("EmailIndex"); - - b.HasIndex("NormalizedUserName") - .IsUnique() - .HasDatabaseName("UserNameIndex") - .HasFilter("[NormalizedUserName] IS NOT NULL"); - - b.ToTable("AspNetUsers"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int") - .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); - - b.Property("ClaimType") - .HasColumnType("nvarchar(max)"); - - b.Property("ClaimValue") - .HasColumnType("nvarchar(max)"); - - b.Property("UserId") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserClaims"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.Property("LoginProvider") - .HasColumnType("nvarchar(450)"); - - b.Property("ProviderKey") - .HasColumnType("nvarchar(450)"); - - b.Property("ProviderDisplayName") - .HasColumnType("nvarchar(max)"); - - b.Property("UserId") - .IsRequired() - .HasColumnType("nvarchar(450)"); - - b.HasKey("LoginProvider", "ProviderKey"); - - b.HasIndex("UserId"); - - b.ToTable("AspNetUserLogins"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.Property("UserId") - .HasColumnType("nvarchar(450)"); - - b.Property("RoleId") - .HasColumnType("nvarchar(450)"); - - b.HasKey("UserId", "RoleId"); - - b.HasIndex("RoleId"); - - b.ToTable("AspNetUserRoles"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.Property("UserId") - .HasColumnType("nvarchar(450)"); - - b.Property("LoginProvider") - .HasColumnType("nvarchar(450)"); - - b.Property("Name") - .HasColumnType("nvarchar(450)"); - - b.Property("Value") - .HasColumnType("nvarchar(max)"); - - b.HasKey("UserId", "LoginProvider", "Name"); - - b.ToTable("AspNetUserTokens"); - }); - - modelBuilder.Entity("Data.Entities.Rents", b => - { - b.HasOne("Data.Entities.Car", "Car") - .WithMany() - .HasForeignKey("CarId"); - - b.HasOne("Data.Entities.User", "User") - .WithMany() - .HasForeignKey("UserId"); - - b.Navigation("Car"); - - b.Navigation("User"); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => - { - b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => - { - b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => - { - b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => - { - b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) - .WithMany() - .HasForeignKey("RoleId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => - { - b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) - .WithMany() - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/RentACar/Data/Migrations/20220329101121_initial.cs b/RentACar/Data/Migrations/20220329101121_initial.cs deleted file mode 100644 index 9fb816c..0000000 --- a/RentACar/Data/Migrations/20220329101121_initial.cs +++ /dev/null @@ -1,17 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -namespace Data.Migrations -{ - public partial class initial : Migration - { - protected override void Up(MigrationBuilder migrationBuilder) - { - - } - - protected override void Down(MigrationBuilder migrationBuilder) - { - - } - } -} diff --git a/RentACar/Data/Migrations/20220329101121_initial.Designer.cs b/RentACar/Data/Migrations/20220401132719_initial.Designer.cs similarity index 99% rename from RentACar/Data/Migrations/20220329101121_initial.Designer.cs rename to RentACar/Data/Migrations/20220401132719_initial.Designer.cs index 96cd065..4341d7a 100644 --- a/RentACar/Data/Migrations/20220329101121_initial.Designer.cs +++ b/RentACar/Data/Migrations/20220401132719_initial.Designer.cs @@ -10,7 +10,7 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion; namespace Data.Migrations { [DbContext(typeof(RentACarDbContext))] - [Migration("20220329101121_initial")] + [Migration("20220401132719_initial")] partial class initial { protected override void BuildTargetModel(ModelBuilder modelBuilder) @@ -99,6 +99,9 @@ namespace Data.Migrations b.Property("FirstName") .HasColumnType("nvarchar(max)"); + b.Property("IsAdmin") + .HasColumnType("bit"); + b.Property("LastName") .HasColumnType("nvarchar(max)"); diff --git a/RentACar/Data/Migrations/20220328141658_InitialMigration.cs b/RentACar/Data/Migrations/20220401132719_initial.cs similarity index 99% rename from RentACar/Data/Migrations/20220328141658_InitialMigration.cs rename to RentACar/Data/Migrations/20220401132719_initial.cs index 27fc668..4d62b07 100644 --- a/RentACar/Data/Migrations/20220328141658_InitialMigration.cs +++ b/RentACar/Data/Migrations/20220401132719_initial.cs @@ -3,7 +3,7 @@ using Microsoft.EntityFrameworkCore.Migrations; namespace Data.Migrations { - public partial class InitialMigration : Migration + public partial class initial : Migration { protected override void Up(MigrationBuilder migrationBuilder) { @@ -72,6 +72,7 @@ namespace Data.Migrations FirstName = table.Column(type: "nvarchar(max)", nullable: true), LastName = table.Column(type: "nvarchar(max)", nullable: true), PersonalNumber = table.Column(type: "nvarchar(max)", nullable: true), + IsAdmin = table.Column(type: "bit", nullable: false), UserName = table.Column(type: "nvarchar(450)", nullable: true), NormalizedUserName = table.Column(type: "nvarchar(max)", nullable: true), Email = table.Column(type: "nvarchar(max)", nullable: true), diff --git a/RentACar/Data/Migrations/RentACarDbContextModelSnapshot.cs b/RentACar/Data/Migrations/RentACarDbContextModelSnapshot.cs index 4bf9e27..b4e9cc8 100644 --- a/RentACar/Data/Migrations/RentACarDbContextModelSnapshot.cs +++ b/RentACar/Data/Migrations/RentACarDbContextModelSnapshot.cs @@ -97,6 +97,9 @@ namespace Data.Migrations b.Property("FirstName") .HasColumnType("nvarchar(max)"); + b.Property("IsAdmin") + .HasColumnType("bit"); + b.Property("LastName") .HasColumnType("nvarchar(max)"); diff --git a/RentACar/Data/Models/User.cs b/RentACar/Data/Models/User.cs index 63bfb69..5206ada 100644 --- a/RentACar/Data/Models/User.cs +++ b/RentACar/Data/Models/User.cs @@ -14,5 +14,7 @@ namespace Data.Entities public string LastName { get; set; } public string PersonalNumber { get; set; } + + public bool IsAdmin { get; set; } } } diff --git a/RentACar/WebApp/Areas/Identity/Pages/Account/Login.cshtml b/RentACar/WebApp/Areas/Identity/Pages/Account/Login.cshtml index 8e4d327..857833a 100644 --- a/RentACar/WebApp/Areas/Identity/Pages/Account/Login.cshtml +++ b/RentACar/WebApp/Areas/Identity/Pages/Account/Login.cshtml @@ -14,9 +14,9 @@
- - - + + +
diff --git a/RentACar/WebApp/Areas/Identity/Pages/Account/Login.cshtml.cs b/RentACar/WebApp/Areas/Identity/Pages/Account/Login.cshtml.cs index 011e062..c5acdcc 100644 --- a/RentACar/WebApp/Areas/Identity/Pages/Account/Login.cshtml.cs +++ b/RentACar/WebApp/Areas/Identity/Pages/Account/Login.cshtml.cs @@ -44,8 +44,7 @@ namespace WebApp.Areas.Identity.Pages.Account public class InputModel { [Required] - [EmailAddress] - public string Email { get; set; } + public string Username { get; set; } [Required] [DataType(DataType.Password)] @@ -82,7 +81,7 @@ namespace WebApp.Areas.Identity.Pages.Account { // This doesn't count login failures towards account lockout // To enable password failures to trigger account lockout, set lockoutOnFailure: true - var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: false); + var result = await _signInManager.PasswordSignInAsync(Input.Username, Input.Password, Input.RememberMe, lockoutOnFailure: false); if (result.Succeeded) { _logger.LogInformation("User logged in."); diff --git a/RentACar/WebApp/Areas/Identity/Pages/Account/Register.cshtml b/RentACar/WebApp/Areas/Identity/Pages/Account/Register.cshtml index d9b50ab..7326a17 100644 --- a/RentACar/WebApp/Areas/Identity/Pages/Account/Register.cshtml +++ b/RentACar/WebApp/Areas/Identity/Pages/Account/Register.cshtml @@ -17,6 +17,36 @@
+
+ + + +
+
+ + + +
+
+ + + +
+
+ + + +
+
+ + + +
+
+ + + +
diff --git a/RentACar/WebApp/Areas/Identity/Pages/Account/Register.cshtml.cs b/RentACar/WebApp/Areas/Identity/Pages/Account/Register.cshtml.cs index 4ba281f..7d26258 100644 --- a/RentACar/WebApp/Areas/Identity/Pages/Account/Register.cshtml.cs +++ b/RentACar/WebApp/Areas/Identity/Pages/Account/Register.cshtml.cs @@ -52,6 +52,25 @@ namespace WebApp.Areas.Identity.Pages.Account [Display(Name = "Email")] public string Email { get; set; } + [Required] + public string UserName { get; set; } + + [Required] + public string FirstName { get; set; } + + [Required] + public string LastName { get; set; } + public bool IsAdmin { get; set; } + + [Required] + [StringLength(10, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 10)] + public string EGN { get; set; } + + [Required] + [DataType(DataType.PhoneNumber)] + [StringLength(10, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 10)] + public string PhoneNumber { get; set; } + [Required] [StringLength(100, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 6)] [DataType(DataType.Password)] @@ -76,25 +95,23 @@ namespace WebApp.Areas.Identity.Pages.Account ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList(); if (ModelState.IsValid) { - var user = new User { UserName = Input.Email, Email = Input.Email }; + var user = new User { Id = Guid.NewGuid().ToString(), UserName = Input.UserName, Email = Input.Email, FirstName = Input.FirstName, LastName = Input.LastName, PhoneNumber = Input.PhoneNumber, PersonalNumber = Input.EGN, IsAdmin = Input.IsAdmin}; var result = await _userManager.CreateAsync(user, Input.Password); if (result.Succeeded) { - _logger.LogInformation("User created a new account with password."); - - var code = await _userManager.GenerateEmailConfirmationTokenAsync(user); - code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code)); - var callbackUrl = Url.Page( - "/Account/ConfirmEmail", - pageHandler: null, - values: new { area = "Identity", userId = user.Id, code = code, returnUrl = returnUrl }, - protocol: Request.Scheme); - - - await _signInManager.SignInAsync(user, isPersistent: false); - return LocalRedirect(returnUrl); - + _logger.LogInformation("User created a new account with password."); + await _signInManager.SignInAsync(user, isPersistent: false); + if (Input.IsAdmin == true) + { + await _userManager.AddToRoleAsync(user, "Admin"); + } + else + { + await _userManager.AddToRoleAsync(user, "User"); + } + return LocalRedirect(returnUrl); } + foreach (var error in result.Errors) { ModelState.AddModelError(string.Empty, error.Description); diff --git a/RentACar/WebApp/Controllers/HomeController.cs b/RentACar/WebApp/Controllers/HomeController.cs index fa2b3b8..6b36d42 100644 --- a/RentACar/WebApp/Controllers/HomeController.cs +++ b/RentACar/WebApp/Controllers/HomeController.cs @@ -25,6 +25,11 @@ namespace API.Controllers public IActionResult Privacy() { + if(!this.User.Identity.IsAuthenticated) + { + return Redirect(""); + } + return View(); } diff --git a/RentACar/WebApp/Startup.cs b/RentACar/WebApp/Startup.cs index 7e67b4c..8ed4d19 100644 --- a/RentACar/WebApp/Startup.cs +++ b/RentACar/WebApp/Startup.cs @@ -48,7 +48,7 @@ namespace API } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. - public void Configure(IApplicationBuilder app, IWebHostEnvironment env) + public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IServiceProvider serviceProvider) { if (env.IsDevelopment()) { @@ -68,7 +68,7 @@ namespace API app.UseAuthentication(); app.UseAuthorization(); - + CreateUserRoles(serviceProvider).Wait(); app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( @@ -77,5 +77,43 @@ namespace API endpoints.MapRazorPages(); }); } + + private async System.Threading.Tasks.Task CreateUserRoles(IServiceProvider serviceProvider) + { + var RoleManager = serviceProvider.GetRequiredService>(); + var UserManager = serviceProvider.GetRequiredService>(); + string[] roleNames = { "Admin", "User"}; + IdentityResult roleResult; + foreach (var roleName in roleNames) + { + var roleCheck = await RoleManager.RoleExistsAsync(roleName); + if (!roleCheck) + { + roleResult = await RoleManager.CreateAsync(new IdentityRole(roleName)); + } + } + + var user = new User(); + user.UserName = "admin"; + user.Id = Guid.NewGuid().ToString(); + user.FirstName = "Admin"; + user.LastName = "Admin"; + user.PersonalNumber = "1234567890"; + user.PhoneNumber = "0888888888"; + user.Email = "admin@admin.admin"; + user.IsAdmin = true; + string userPWD = "password"; + var _user = await UserManager.FindByNameAsync(user.UserName); + if (_user == null) + { + IdentityResult chkUser = await UserManager.CreateAsync(user, userPWD); + if (chkUser.Succeeded) + { + await UserManager.AddToRoleAsync(user, "Admin"); + } + + } + + } } } diff --git a/RentACar/WebApp/Views/Cars/Index.cshtml b/RentACar/WebApp/Views/Cars/Index.cshtml index bab159c..2937a34 100644 --- a/RentACar/WebApp/Views/Cars/Index.cshtml +++ b/RentACar/WebApp/Views/Cars/Index.cshtml @@ -5,9 +5,11 @@ }

Index

-

- New Car + @if (this.User.IsInRole("Admin")) + { + New car + }

@@ -34,32 +36,33 @@ -@foreach (var item in Model) { - - - - - - - - - -} + @foreach (var item in Model) + { + + + + + + + + + + }
- @Html.DisplayFor(modelItem => item.Brand) - - @Html.DisplayFor(modelItem => item.Model) - - @Html.DisplayFor(modelItem => item.Year) - - @Html.DisplayFor(modelItem => item.CountPassengerSeats) - - @Html.DisplayFor(modelItem => item.Description) - - @Html.DisplayFor(modelItem => item.PriceForDay) - - Edit | - Details | - Delete -
+ @Html.DisplayFor(modelItem => item.Brand) + + @Html.DisplayFor(modelItem => item.Model) + + @Html.DisplayFor(modelItem => item.Year) + + @Html.DisplayFor(modelItem => item.CountPassengerSeats) + + @Html.DisplayFor(modelItem => item.Description) + + @Html.DisplayFor(modelItem => item.PriceForDay) + + Edit | + Details | + Delete +
diff --git a/RentACar/WebApp/Views/Shared/_Layout.cshtml b/RentACar/WebApp/Views/Shared/_Layout.cshtml index 40f538c..009c8c3 100644 --- a/RentACar/WebApp/Views/Shared/_Layout.cshtml +++ b/RentACar/WebApp/Views/Shared/_Layout.cshtml @@ -27,6 +27,15 @@ + @if (this.User.IsInRole("Admin")) + { + + + }