我正在寻找一些关于如何在ASP.NET核心6中实现我的安全需求的建议。
基本上,我有A公司有多个资产(资产A,资产B)。
我设想下列角色:
asset
的资产
到目前为止,我想到的两条途径是
选项1
AssetId
aspnetUserRole表以包含SignInManager,并更改IsInRole以检查用户是否具有assetId的角色。assetId存储在一个声明中.这的缺点是,对于角色管理员,任何有此功能的人都需要添加到每个位置,这似乎有点痛苦。
选项2
政策,我想知道这是否是更好的选择,但我不知道如何构建它是用户友好。
我在考虑这些政策:
Locations
查看项目
然后,我将需要一个新的表连接策略、资产和用户,以确定他们对每个资产都有哪些策略。
然而,我应该如何处理管理员谁应该做任何事情?它是否会像一个名为SiteAdmin的策略一样简单,它在任何地方都有访问权?
发布于 2022-11-17 06:46:18
我认为您可以尝试向用户添加另一个索赔Asset。
//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);向用户添加角色:
await _rolemanager.CreateAsync(new IdentityRole("Admin"));
var addroleresult = await _userManager.AddToRoleAsync(user, "Admin");反政府政策:
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"));
});
}在控制器上测试:
[Authorize(Policy = "AssetA")]
public IActionResult AssetA()
{
return View();
}
[Authorize(Policy = "AssetB")]
public IActionResult AssetB()
{
return View();
}
[Authorize(Policy = "SuperAdmin")]
public IActionResult SuperAdmin()
{
return View();
}结果:



https://stackoverflow.com/questions/74457835
复制相似问题