簡體   English   中英

ASP.NET身份添加角色

[英]ASP.NET Identity Adding Role

我正在與MVC合作進行項目。 我想使用IDENTITY庫作為會員。 這是解決方案視圖:

我做了accountController並添加Registerview。

    public async Task<ActionResult> Register(RegisterViewModel model)
    {
        if (!ModelState.IsValid) return View(model);

        var userManager = MemberShipTools.NewUserManager();

        var roleManager = MemberShipTools.NewRoleManager();
        var checkUser = userManager.FindByName(model.TCNo);



        if (checkUser!=null)
        {
            ModelState.AddModelError(string.Empty, "Bu TC No sistemde kayıtlı");
            return View(model);
        }

        checkUser = userManager.FindByEmail(model.Email);
        if (checkUser!=null)
        {
            ModelState.AddModelError(string.Empty, "Bu mail adresi sistemde kayıtlı");
            return View(model);
        }

        var user = new Kullanici()
        {
            Ad=model.Ad,
            Soyad=model.Soyad,
            Email=model.Email,
            UserName=model.TCNo,        
        };

        var response = userManager.Create(user, model.Sifre);

        if (response.Succeeded)
        {
            if (userManager.Users.ToList().Count() == 1)
            {
                userManager.AddToRole(user.Id, "Admin");
            }
            else
            {
                userManager.AddToRole(user.Id, "Passive");
            }
            return RedirectToAction("Login", "Hesap");
        }
        else
        {
            ModelState.AddModelError(string.Empty, "Kayıt işleminde bir hata oluiştu");
            return View(model);
        }
    }

當我嘗試添加新成員時,它說“角色管理員不存在”。 但是向用戶表中添加了新成員,AspNet角色表為空。 之后,我在該站點中搜索並找到了解決方案,然后將這些行添加到代碼中,效果很好。

         const string roleName = "Admin";

        var role = roleManager.FindByName(roleName);
        if (role == null)
        {
            role = new Rol() { Name="Admin", Aciklama="Site Yöneticisi"};
            roleManager.Create(role);
        }

但這不合邏輯,我要檢查角色並嘗試添加角色的每個注冊頁面,我的問題是我應該在哪里寫此Roll Adding代碼,在哪一頁上寫這層代碼,因為我只需要兩個或三個角色。 我必須一次創建它們,我知道但是我不知道該在哪里做。 感謝您的回答對不起我的英語不好:)

可能有幫助的是讓種子數據庫類在啟動時運行。 假設您使用的是代碼優先數據庫是否安全? 我將展示兩個示例。

因此,在“數據”文件夾中要做的第一件事是創建一個名為“ SeedData”的類

using Project.Models.DatabaseModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Threading.Tasks;

namespace Project.Data
{
    public class SeedData
    {
        private ApplicationDbContext _context;

        public ApplicationContextSeedData(ApplicationDbContext context)
        {
            _context = context;
        }
        public void EnsureSeedData()
        {

            if ("Check if roles are already there")
            {
                role = new Rol() { Name="Role1", Aciklama="Site Yöneticisi"};
                roleManager.Create(role);
                role = new Rol() { Name="Role2", Aciklama="Site Yöneticisi"};
                roleManager.Create(role);
                role = new Rol() { Name="Role3", Aciklama="Site Yöneticisi"};
                roleManager.Create(role);

            }

        }

    }
}

然后,在Startup.cs類中完成此操作后,添加以下行:

   public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
        services.AddDbContext<ApplicationDbContext>(options =>
           options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
        services.AddScoped<SeedData>(); <------ This Line

    }

然后,一旦確定,您要確保在應用程序啟動時在數據庫中創建的所有內容都將進入SeedData類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM