ASP NET CORE RAZOR PAGE BAKIM TEKNİK SERVİS PROJESİ 026 Admin / Yönetici Profili Kayıt

Bu dersimiz de yönetici yani admin olarak giriş yapan bir kullanıcının yeni bir admin/yönetici eklemesi işlemi için ilgili kayıt sayfasında düzenleme yapacağım. Bunun için projemde Areas > Identity > Pages > Account klasörü içinde yer alan Register.cshtml.cs page model classıma geliyorum. Buraya bir property daha ekliyorum.  InputModel içine AdminMi adında bir property ekledim.

Daha detaylı bilgi ve kod takibi için mutlaka videoya göz atınız

public class InputModel
        {
            [Required]
            [EmailAddress]
            [Display(Name = "Email")]
            public string Email { get; set; }

            [Required]
            [StringLength(100, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 6)]
            [DataType(DataType.Password)]
            [Display(Name = "Password")]
            public string Password { get; set; }

            [DataType(DataType.Password)]
            [Display(Name = "Confirm password")]
            [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
            public string ConfirmPassword { get; set; }

            [Required]
            public string AdSoyad { get; set; }
            public string Adres { get; set; }
            public string Sehir { get; set; }
            public string PostaKodu { get; set; }

            [Required]
            public string PhoneNumber { get; set; }

            public bool AdminMi { get; set; }

        }

Daha sonra Register sayfamızın razor page kısmına geliyorum. Benim statik roller classımı buraya refere ediyorum. Akabinde eğer giriş yapan kullanıcı rolü Admin ise bu sefer register sayfasında en alt kısımda ilgili kayıt olan kişinin rolü ve checkbox’ımın çıkmasını sağlıyorum.

@page
@model RegisterModel
@using GursoyCNCBakim.Utility
@{
    ViewData["Title"] = "Register";
}

Yeni Hesap Oluştur

Ad - Soyad: @**@
E-Posta: @**@
Telefon No: @**@
Adres: @**@
Şehir: @**@
Posta Kodu: @**@
Şifre: @**@
Şifre Tekrar: @**@
@if (User.IsInRole(StatikRoller.AdminKullanici)) {
Role Admin mi? @**@
}
@section Scripts { }

Tasarım kısmımız tamamlandı, eğer yönetici yani admin girişi olursa alttaki checkbox çıkacak ancak normal kullanıcı girdi ise bu checkbox çıkmayacak.

Şimdi işin kayıt kısmını halledelim. Eğer admin bu checkbox üzerinde bir işaretleme yaparsa benim gelen yeni kaydı admin olarak kaydetmem gerek. Dolayısı ile Register.cshtml.cs page-modele geliyorum ve aşağıdaki gibi kodları düzenliyorum.

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Text.Encodings.Web;
using System.Threading.Tasks;
using GursoyCNCBakim.Data;
using GursoyCNCBakim.Models;
using GursoyCNCBakim.Utility;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.UI.Services;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.WebUtilities;
using Microsoft.Extensions.Logging;

namespace GursoyCNCBakim.Areas.Identity.Pages.Account
{
    [AllowAnonymous]
    public class RegisterModel : PageModel
    {
        private readonly SignInManager< IdentityUser > _signInManager;
        private readonly UserManager< IdentityUser > _userManager;
        private readonly ILogger< RegisterModel > _logger;
        private readonly IEmailSender _emailSender;
        private readonly RoleManager< IdentityRole > _roleManager;
        private readonly ApplicationDbContext _db;

        public RegisterModel(
            UserManager< IdentityUser > userManager,
            SignInManager< IdentityUser > signInManager,
            ILogger< RegisterModel > logger,
            IEmailSender emailSender,
            RoleManager< IdentityRole > roleManager,
            ApplicationDbContext db)
        {
            _userManager = userManager;
            _signInManager = signInManager;
            _logger = logger;
            _emailSender = emailSender;
            _db = db;
            _roleManager = roleManager;
        }

        [BindProperty]
        public InputModel Input { get; set; }

        public string ReturnUrl { get; set; }

        public IList< AuthenticationScheme > ExternalLogins { get; set; }

        public class InputModel
        {
            [Required]
            [EmailAddress]
            [Display(Name = "Email")]
            public string Email { get; set; }

            [Required]
            [StringLength(100, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 6)]
            [DataType(DataType.Password)]
            [Display(Name = "Password")]
            public string Password { get; set; }

            [DataType(DataType.Password)]
            [Display(Name = "Confirm password")]
            [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
            public string ConfirmPassword { get; set; }

            [Required]
            public string AdSoyad { get; set; }
            public string Adres { get; set; }
            public string Sehir { get; set; }
            public string PostaKodu { get; set; }

            [Required]
            public string PhoneNumber { get; set; }

            public bool AdminMi { get; set; }

        }

        

        public async Task OnGetAsync(string returnUrl = null)
        {
            ReturnUrl = returnUrl;
            ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
        }

        public async Task< IActionResult > OnPostAsync(string returnUrl = null)
        {
            returnUrl = returnUrl ?? Url.Content("~/");
            ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
            if (ModelState.IsValid)
            {
                var user = new ApplicationUser 
                { 
                    UserName = Input.Email, 
                    Email = Input.Email,
                    AdSoyad = Input.AdSoyad,
                    Adres = Input.Adres,
                    Sehir = Input.Sehir,
                    PostaKodu = Input.PostaKodu,
                    PhoneNumber = Input.PhoneNumber
                };

                

                var result = await _userManager.CreateAsync(user, Input.Password);
                if (result.Succeeded)
                {
                    if (!await _roleManager.RoleExistsAsync(StatikRoller.AdminKullanici))
                    {
                        await _roleManager.CreateAsync(new IdentityRole(StatikRoller.AdminKullanici));
                    }

                    if (!await _roleManager.RoleExistsAsync(StatikRoller.MusteriKullanici))
                    {
                        await _roleManager.CreateAsync(new IdentityRole(StatikRoller.MusteriKullanici));
                    }

                    if (Input.AdminMi)
                    {
                        await _userManager.AddToRoleAsync(user, StatikRoller.AdminKullanici);

                        
                        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 _emailSender.SendEmailAsync(Input.Email, "Confirm your email",
                            $"Please confirm your account by clicking here.");


                        return RedirectToPage("/Kullanicilar/Index");
                    }

                    else
                    {
                        await _userManager.AddToRoleAsync(user, StatikRoller.MusteriKullanici);

                        //await _signInManager.SignInAsync(user, isPersistent: false);

                        if (User.IsInRole(StatikRoller.AdminKullanici))
                        {
                            return RedirectToPage("/Kullanicilar/Index");
                        }
                        else
                        {
                            return LocalRedirect(returnUrl);
                        }
                            
                        

                        
                    }

                    
                    

                    _logger.LogInformation("User created a new account with password.");

                   

                    //if (_userManager.Options.SignIn.RequireConfirmedAccount)
                    //{
                    //    return RedirectToPage("RegisterConfirmation", new { email = Input.Email, returnUrl = returnUrl });
                    //}
                    //else
                    //{
                    //    await _signInManager.SignInAsync(user, isPersistent: false);
                    //    return LocalRedirect(returnUrl);
                    //}
                }

                foreach (var error in result.Errors)
                {
                    ModelState.AddModelError(string.Empty, error.Description);
                }
            }

            // If we got this far, something failed, redisplay form
            return Page();
        }
    }
}

Daha detaylı bilgi ve kod takibi için mutlaka videoya göz atınız, bir sonraki derste görüşmek üzere.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir