如何从 ASP.NET Identity Core 2.0 中删除与角色相关的表

2023-11-22

根据在其他地方读到的建议,角色是声明的子集,我正在寻找一种干净的方法来要求 ASP.NET Identity 中的 EF Core 实现不要在 VS 的 ASP.NET Identity Core 2.0 模板中创建与角色相关的表2017. 只需要索赔。 模板使用

    public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }

    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);
        // Customize the ASP.NET Identity model and override the defaults if needed.
        // For example, you can rename the ASP.NET Identity table names and more.
        // Add your customizations after calling base.OnModelCreating(builder);
    }
}

IdentityDbContext 创建这些与 Roles 相关的表

https://github.com/aspnet/Identity/blob/dev/src/Microsoft.AspNetCore.Identity.EntityFrameworkCore/IdentityDbContext.cs

如何在不操作迁移文件的情况下摆脱它们?


这在 ASP.NET Identity 中一直是可能的,但随着时间的推移,它变得更加容易,因为约定已经从角色转向权利、操作、声明、谓词和其他更可重用和可维护的语义。多年来,我一直在我的 ASP.NET 项目中使用 Identity 以及我预先存在的数据库架构(没有角色表)。我承认,由于 ASP.NET Identity 的繁琐复杂性,以及 ASP.NET 中开源代码的快节奏变化,再加上完全缺乏人类知情的文档,理解如何做到这一点相当困难在 API 参考中(完全是机器生成的样板)。

在 ASP.NET Core 之前,您可以通过重写来做到这一点UserManager and UserStore实施。通过使用无操作来消除角色请求,或者覆盖RoleAttribute使用更有用且对开发人员安全的实现(可能不是基于魔术字符串!),角色表的缺失不会被注意到。即使使用默认实现,如果您从未使用默认角色属性实现或询问角色问题,则可以删除表而不会产生任何后果。默认的 ASP.NET 脚手架都不依赖于角色。

在原始 ASP.NET Core Identity 1.0/1.1 版本中,您通过实现来做到这一点UserStore没有可选的IUserRoleStore界面。相关信息可以在主要 ASP.NET Core Identity 文档.

从 ASP.NET Core 2.0 开始(根据您的主要问题),您可以通过从以下内容派生上下文来更轻松地做到这一点IdentityUserContext代替IdentityDbContext,如下例所示。由于在 2.0 中不再需要自定义实现the new UserOnlyStore。致电给AddIdentityStartup.cs 中也需要替换为AddIdentityCore. AddIdentityCore如果您依赖其他标准身份验证功能,则需要几行额外的代码,因为默认情况下它不会初始化 Cookie 或 TokenProvider。 (如下所述,在 2.1 中,对样板进行了更改Startup不再需要。)

在 ASP.NET Core 2.1/2.2(撰写本文时为当前版本)中删除角色非常简单。下面用一个新项目的例子来演示:

  1. 创建一个新项目来证明身份,选择:

    1. ASP.NET Core Web 应用程序项目类型
    2. Web 应用程序(任一类型,例如 MVC)
    3. 更改身份验证
    4. 个人用户帐户
    5. 在应用程序内存储用户帐户
  2. 从新搭建的 Identity 项目中删除角色

    1. edit Data\ApplicationDbContext.cs, elevating the context base class above roles
      • from: ApplicationDbContext : IdentityDbContext
      • to: ApplicationDbContext : IdentityUserContext<IdentityUser>
    2. 请注意,IdentityUserContext 需要一个 IdentityUser 泛型
    3. 由于 ASP.NET Core 2.1 中的新身份代码,这就是所需要的
  3. 请注意IdentityUserContext缺少 Role,因此自定义键类型仅需要 2 个参数

    1. 在ApplicationDbContext.cs中:IdentityUserContext<IdentityUser<int>, int>
    2. 在 Startup.cs 中,AddDefaultIdentity<IdentityUser<int>>()指定如前
    3. 提供给 _LoginPartial.cshtml 的模型也像以前一样指定。有关更改身份模型的更多详细信息
    4. if you've changed identity key type, the default EF Migration process fails
      1. 如果您更改了密钥,EF 会生成非功能性迁移
      2. simply deleting Data\Migrations works in test, with these caveats:
        • 脚手架项目包含非默认索引
        • 如果您已经运行该项目,则需要删除数据库
  4. 更新/构建数据库架构以反映上述内容。在包管理器控制台中:

    1. Add-Migration RemoveIdentitySchemaRoles
    2. Update-Database
  5. 运行应用程序

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 ASP.NET Identity Core 2.0 中删除与角色相关的表 的相关文章

随机推荐

  • 跳过调试器中的当前行

    有没有办法使用键盘快捷键跳过 Visual Studio 调试器中的当前行 我能够做到这一点的唯一方法是使用左侧的黄色光标或 设置下一个语句 这在函数末尾不起作用 设置下一条语句 CTRL SHIFT F10 快捷方式将在函数末尾起作用 但
  • 谷歌地图与离子

    我正在尝试使用 google 地图和 Ionic 来实现地图 我按照这个编码Link但我得到的只是一个空白屏幕 不知道哪里出了问题 请帮忙 这是控制器 angular module starter ionic controller MapC
  • 如何从日期时间创建日期(使用 lubridate)?

    假设我创建了一个包含日期和时间的变量 a lt ymd hms 2014 01 01 12 23 34 如何创建另一个只有日期的变量 也就是我应该怎么做才能转型a的值等于b的值在哪里b is b lt ymd 2014 01 01 你可以只
  • 如何在按下返回键时快速隐藏键盘?

    I am using UITextfied while clicking on textfied keyboard appear but when i pressed the return key keyboard is not disap
  • password_hash、password_verify、MySQL的误解?

    我似乎无法让这个测试显示数据库中的哈希密码 它可以很好地显示表单中的密码 尝试进行此测试以找出为什么我无法将表单中的密码与数据库中存储的密码进行比较来验证密码 我读到了一些关于转义哈希中的 符号的内容 但我不确定如何使用我正在使用的代码来做
  • locale什么时候影响R的正则表达式?

    R 有几个用于正则表达式的特殊的与语言环境无关的字符类 From regex alnum 表示 0 9A Za z 后者除外 取决于区域设置和字符编码 而 前者独立于区域设置和字符集 我想知道何时会出现特定于区域设置的问题 我根据中的信息尝
  • Powerpoint:手动设置幻灯片名称

    Context C 中的 PowerPoint 幻灯片有一个属性 Slide Name 通常包含任意字符串值 在我的 C 应用程序中 我想使用此属性来识别幻灯片 幻灯片顺序不可靠 问题 如何在 PowerPoint 应用程序中手动设置 Sl
  • 免费网络监控器

    我在集成两种产品时遇到问题 其中一种是我的 但它们似乎没有说话 所以我想确保他们的沟通正确 我查看了网络监视器并发现了 TCP Spy 这有效 但一次只显示对话的一侧 它必须在本地运行 我理想情况下希望同时看到双方 但你不能运行 TCP S
  • 在 Ruby 中实现同步屏障

    我正在尝试 复制 CUDA 的行为 synchtreads Ruby 中的函数 具体来说 我有一组N需要执行某些代码的线程 然后在继续执行其余业务之前 所有线程都在执行中点互相等待 例如 x 0 a Thread new do x 1 sy
  • wait_fences:未能收到回复:10004003 - 什么?

    一直收到这个奇怪的错误 事情是这样的 在下面的方法中 我会出现一个警报视图 获取 U N 和 PW 然后尝试启动另一个方法 方法 postTweet 没有被激活 我刚刚在控制台中收到此错误 wait fences failed to rec
  • 如何在不使用 as 的情况下确保 TypeScript string|string[] 是字符串?

    edit由于时间的推移 这个问题从对此的评论和回答看来 它已经失去了有效性 尽管最初出现 但它并不是这个的骗局 我有一个翻译功能 通过以下签名工作 getI18n id string string 我注意到输入以下内容有点乏味 const
  • 从文本视图中删除粗体而不更改其他属性

    I use setTypeface设置文本粗体 或斜体 或其他字体属性 TextView tv findViewById R id label tv setTypeface null Typeface BOLD 如何仅删除粗体属性 而不更改
  • 在 Java 中将列表复制回数组以及反之亦然的时间复杂度是多少?

    我想知道时间复杂度是多少 in bigO n 的符号 ArrayList to Array转换 ArrayList assetTradingList new ArrayList assetTradingList add Stocks tra
  • 这里如何推断泛型类型?

    public static void main String args Map
  • SQL允许相同的列名

    当我在 SQL Server 中运行此查询时 SELECT custid AAA companyname AAA FROM Sales Customers WHERE country USA 运行良好 但现在结果集有重复的列名 AAA 为什
  • 如何查询bigquery表中存储为字符串的json?

    如何查询bigquery表中存储为字符串的json 我有一个表 其中列中的值 subscriptions 看起来像这样 data application fee percent null canceled at null created 1
  • Jupyter 笔记本中未显示散景

    我无法在 Jupyter Notebook 中绘制最基本的散景图 我进行了搜索 发现这是一年多前报告的问题 但此后就没有了 这对其他人来说仍然是一个问题吗 from bokeh io import output notebook show
  • 当大小是变量而不是常量时如何创建数组?

    我有一个接收变量 int 的方法 该变量构成了一个数组大小 请不要向我提供向量 因此 我需要在我的方法中初始化一个 const int 来初始化特定大小的数组 问题 我该怎么做 void foo int variable int int a
  • 获取要传播的附加属性继承

    我无法获取附加属性值以在视觉层次结构中将树从父项传播到子项 设置如下 我有一个实例化 Viewport3D 的自定义面板 然后 面板处理添加和删除的子项 为每个子项创建和添加继承的 Visual3D 类 我正在尝试声明一个名为 Attach
  • 如何从 ASP.NET Identity Core 2.0 中删除与角色相关的表

    根据在其他地方读到的建议 角色是声明的子集 我正在寻找一种干净的方法来要求 ASP NET Identity 中的 EF Core 实现不要在 VS 的 ASP NET Identity Core 2 0 模板中创建与角色相关的表2017