c# - 我应该避免使用内置的 ASP.NET 身份机制吗?
问题描述
我正在尝试创建一个能够创建具有广泛权限的用户帐户的应用程序。我目前正在使用内置的 ASP.NET Core 身份系统,但我遇到了一些我没有找到或没有找到任何干净的解决方案的问题,稍后将在帖子中进行解释。这让我想到创建自己的自定义身份机制来满足我的需求。
我面临的问题是:
我使用 MySQL 作为我的数据库提供程序,并在创建数据库表时抛出以下异常"Specified key was too long: max key length is 3072 bytes"。我设法通过覆盖OnModelCreating方法并使用以下代码手动更改 HasMaxLength值来解决此问题
modelBuilder.Entity<IdentityUserLogin>().Property(ul => ul.LoginProvider).HasMaxLength(36);
它并不漂亮,但它完成了工作。
- 我希望我的用户能够将多个电子邮件和多个电话号码添加到他们的帐户中。内置的 ASP.NET Core 标识在用户表中创建一个电子邮件和一个电话号码列。我知道我可以阻止它创建这些列,但我真的不相信这是正确的解决方案。基本上我需要的是有一个与用户表相关的表,该表将存储用户的电子邮件和一个用于遵循相同模式的电话号码的表。
- 我的应用程序将能够创建动态字段,并且还能够为其用户授予与这些字段相关的权限(例如 CanSee、CanEdit、CanDelete)。内置的角色授权系统不符合我的要求,我已经看到很多围绕内置的索赔授权系统的嗡嗡声。我实际上已经读过,一个非常接近我需要的授权系统的实现非常复杂并且很难维护!
我的问题是,即使我面临这样的问题,我是否应该使用内置的 ASP.Net 核心身份系统来实现我的目标?在使用 ASP.Net 核心身份系统时,是否有任何我不知道的问题的解决方案可以让我的生活更轻松?我应该创建自己的身份系统吗?如果是,这样的系统会有多困难和潜在危险?
解决方案
您应该使用 ASP.NET Identity 并对其进行自定义。
您应该将声明视为权限。声明是其基础,经过授权的过滤器。