首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET核心6 MVC :如何配置基于人员部门/角色的身份验证和授权

ASP.NET核心6 MVC :如何配置基于人员部门/角色的身份验证和授权
EN

Stack Overflow用户
提问于 2022-11-16 09:12:39
回答 1查看 76关注 0票数 0

我正在寻找一些关于如何在ASP.NET核心6中实现我的安全需求的建议。

基本上,我有A公司有多个资产(资产A,资产B)。

我设想下列角色:

asset

  • Administrator:
  • 用户:可以查看站点中的只读
  • 超级用户:可以编辑资产项,编辑位置的
  • 可以做任何超级用户可以做的事情,还可以添加新用户并分配给他们可以查看

的资产

到目前为止,我想到的两条途径是

选项1

AssetId

  • Override

  • 更改aspnetUserRole表以包含SignInManager,并更改IsInRole以检查用户是否具有assetId的角色。assetId存储在一个声明中.

这的缺点是,对于角色管理员,任何有此功能的人都需要添加到每个位置,这似乎有点痛苦。

选项2

政策,我想知道这是否是更好的选择,但我不知道如何构建它是用户友好。

我在考虑这些政策:

Locations

  • Can
  • 可以编辑项目
  • 可以编辑

查看项目

  • 可以查看位置

然后,我将需要一个新的表连接策略、资产和用户,以确定他们对每个资产都有哪些策略。

然而,我应该如何处理管理员谁应该做任何事情?它是否会像一个名为SiteAdmin的策略一样简单,它在任何地方都有访问权?

EN

回答 1

Stack Overflow用户

发布于 2022-11-17 06:46:18

我认为您可以尝试向用户添加另一个索赔Asset

代码语言:javascript
复制
//For SuperUser:
var userclaim = new Claim("Asset","AssetA");
//var userclaim = new Claim("Asset","AssetB");
.......

//For Administrator
var userclaim = new Claim("Asset","AllAsset");

// add the claim to User
var claimresult = await _userManager.AddClaimAsync(user, userclaim);

向用户添加角色:

代码语言:javascript
复制
 await _rolemanager.CreateAsync(new IdentityRole("Admin"));
 var addroleresult = await _userManager.AddToRoleAsync(user, "Admin");

反政府政策:

代码语言:javascript
复制
public void ConfigureServices(IServiceCollection services)
    {
        .......
        services.AddAuthorization(options =>
        {
            options.AddPolicy("AssetA",
            policy => policy.RequireClaim("Asset", "AssetA", "AllAsset").RequireRole("Admin", "SuperAdmin"));
            options.AddPolicy("AssetB",
            policy => policy.RequireClaim("Asset", "AssetB", "AllAsset").RequireRole("Admin", "SuperAdmin"));
            options.AddPolicy("SuperAdmin",
            policy => policy.RequireRole("SuperAdmin"));
        });
    }

在控制器上测试:

代码语言:javascript
复制
[Authorize(Policy = "AssetA")]
        public IActionResult AssetA()
        {
            return View();
        }
        [Authorize(Policy = "AssetB")]
        public IActionResult AssetB()
        {
            return View();
        }
        [Authorize(Policy = "SuperAdmin")]
        public IActionResult SuperAdmin()
        {
            return View();
        }

结果:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74457835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档