C# 基于ASP策略分配的条件Vue组件呈现
我有一个.NET核心后端,由C# 基于ASP策略分配的条件Vue组件呈现,c#,vue.js,asp.net-core,C#,Vue.js,Asp.net Core,我有一个.NET核心后端,由Vue.js前端提供服务 我们有一对多客户-用户关系,希望能够分配一个或多个用户来管理其客户帐户的其他用户 使用Razor视图这很简单,因为我可以简单地使用它 UserManager.IsInRole(“管理员”){//Admin面板按钮在这里}… 并提供一个可点击的按钮,该按钮将指向授权使用的路线 [授权(Roles=“Admin”)] 在运行时,如果您不是正确的角色,Razor视图根本不会编译Admin Panel按钮,但在使用JWT承载令牌和策略时,我很难实现类
Vue.js
前端提供服务
我们有一对多客户-用户关系,希望能够分配一个或多个用户来管理其客户帐户的其他用户
使用Razor
视图这很简单,因为我可以简单地使用它
UserManager.IsInRole(“管理员”){//Admin面板按钮在这里}…
并提供一个可点击的按钮,该按钮将指向授权使用的路线
[授权(Roles=“Admin”)]
在运行时,如果您不是正确的角色,Razor视图根本不会编译Admin Panel按钮,但在使用JWT承载令牌
和策略
时,我很难实现类似/相同的逻辑
我可以使用策略
分配授权路线
或行动
:
// Startup.cs
options.AddPolicy("User", policy => policy.RequireClaim(JwtConstants.JwtClaimIdentifiers.Rol, JwtConstants.JwtClaims.User));
// Controller.cs
[Authorize(Policy = "User")]
但我很难决定如何根据分配给用户的策略有条件地为管理面板装载Vue组件
在后端,所有内容都经过正确授权,因此如果没有分配admin
策略,则无法导航或与管理员控件交互,但在前端合理地呈现这一点会造成一些问题
一个简单的解决方案是在成功登录后返回一个对象,例如:
var auth = {
Jwt: 'xxxxxxxxx',
Policy: 'Admin'
}
然后将策略
道具保存在本地存储
,然后在此基础上挂载管理组件
,但我想知道是否有更好的方法不会将管理控件公开给可以公开的人(很简单)编辑LocalStorage
?在创建令牌时,可以在jwt中添加与用户相关的信息。jwt包含与策略相关的信息,这是我可以在控制器中验证请求的方式,但我不想提供客户端解码器来将其从令牌中解析出来。这样你可以通过反转解码器来伪造JWT。不,在客户端解码令牌是安全的。只需嵌入jwt解码库。