[英]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.