Blazor - 身份在应用程序启动时添加角色

Posted

技术标签:

【中文标题】Blazor - 身份在应用程序启动时添加角色【英文标题】:Blazor - Identity Add roles on application startup 【发布时间】:2020-12-06 05:35:34 【问题描述】:

我在 Blazor .net 3.1 中启动了一个应用程序,但遇到了问题。我想在启动应用程序时添加一个具有管理员角色(root)的用户。我正在使用 EF。添加用户有效,但添加角色会引发异常。

System.AggregateException : 'No service for type 'Microsoft.AspNetCore.Identity.RoleManager'1[Microsoft.AspNEtCore.Identity.IdentityRole]' has been registered.ontainer is destroyed)'

我尝试了不同的解决方案,例如ASP.NET Core Identity Add custom user roles on application startup、old post,但在 SQLite、SQL Server 上我仍然有同样的异常...

我创建了一个静态类,并在 Startup.cs 中调用了这个方法。

public static class RolesData

    private static readonly string[] Roles = new string[]  "Admin", "Manager", "Member" ;

    public static async Task SeedRoles(IServiceProvider serviceProvider)
    
        using (var serviceScope = serviceProvider.GetRequiredService<IServiceScopeFactory>().CreateScope())
        
            var roleManager = serviceScope.ServiceProvider.GetRequiredService<RoleManager<IdentityRole>>();
            foreach (var role in Roles)
            
                if (!await roleManager.RoleExistsAsync(role))
                
                    await roleManager.CreateAsync(new IdentityRole(role));
                
            
        
    


public void Configure(IApplicationBuilder app, IWebHostEnvironment env)

    ...
    RolesData.SeedRoles(app.ApplicationServices).Wait();

如果您有任何我感兴趣的建议,并且如果您知道一个解释身份验证的网站,我想了解!

感谢您的帮助

【问题讨论】:

分享您的 Statup ConfigureServices 方法 【参考方案1】:

请参阅我的answer,了解如何使用IEntityTypeConfiguration 在 ASP.NET Core(适用于 3.1)中播种各种数据

我还没有在 blazor 上尝试过,但我认为值得一试。

注意:更改需要数据库迁移。

【讨论】:

我开始一个测试项目来测试你的解决方案。【参考方案2】:

根据错误,您似乎没有配置身份服务器来公开角色。

例如在 Startup.cs 中

services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = true)
                .AddRoles<IdentityRole>()  // <------
                .AddEntityFrameworkStores<ApplicationDbContext>();

我有一个标准模板,其中角色为 here

进一步展示了如何启用 Authorize 属性:

@attribute [Authorize(Roles = "Administrator")]

和 AuthorizeView :

<AuthorizeView Roles="Administrator">
    Only Administrators can see this.<br />
</AuthorizeView>
<AuthorizeView Roles="Moderator">
    Only Moderators can see this.<br />
</AuthorizeView>
<AuthorizeView Roles="Moderator,Administrator">
    Administrators and Moderators can see this.
</AuthorizeView>

我对标准项目所做的更改以启用角色并使它们对 Blazor WebAssembly 可见,可以在 commit 中看到

【讨论】:

谢谢!当它起作用时,我喜欢感觉到心脏的那一点点;) 链接断开兄弟! “提交” @LukeVincent 解决了谢谢。这是一个较新的 repo .net 5.0 github.com/BrianLParker/AuthApp/commit/… 非常感谢布莱恩!在你出现之前,我一直在谷歌上搜索这个身份,但成功率为零!现在我的项目可以全速进行了!附言额外的奖励,我的网络应用程序在 net 5.0 中,所以全面获胜。

以上是关于Blazor - 身份在应用程序启动时添加角色的主要内容,如果未能解决你的问题,请参考以下文章

Blazor WebAssembly .Net 5 Msal 身份验证中基于角色的授权

在 Blazor WebAssembly 中使用身份验证角色和策略?

Blazor入门100天 : 身份验证和授权

当用户在 Blazor Webassembly 身份验证和授权中具有多个角色时出现问题?

身份剃须刀页面中的 Blazor 组件

启动应用程序时 Blazor css 文件未更新