c# - 如何制作强类型的 AuthorizeAttribute
问题描述
我有一个 blazor Net 5.0 spa 项目
我想将像这样的枚举用于强类型的 AuthorizeAttribute 和 AuthorizeView 用于 Blazor 组件,并添加一些功能,例如检查多个角色是否存在而不是多个角色中的一个
枚举
public enum RolesEnum
{
Access = 1,
Administrator = 2
}
如何创建 AuthorizeAttribute 和 AuthorizeView 的扩展版本?
编辑
作为一个简单的开始,我尝试在没有获得授权的情况下制作这样的课程。我也尝试将其添加到服务中。
public class StrongRoleAuthorizeAttribute : AuthorizeAttribute
{
public StrongRoleAuthorizeAttribute(params RolesEnum[] rolesEnums) : base()
{
StrongRoles = rolesEnums;
}
private RolesEnum[] StrongRoles
{
get
{
return this.Roles.Split(",").Select(r => ClaimRoles.GetRolesTypeEnum(r)).ToArray();
}
set
{
this.Roles = string.Join(",", value.Select(r => r.RolesEnumToStringClaim()));
}
}
}
编辑2
我使用错误的方法转换为索赔值
解决方案
您可以简单地继承属性:
public class MyAuthorizeAttribute : AuthorizeAttribute
{
private readonly RolesEnum _authorizedRole;
public MyAuthorizeAttribute(RolesEnum authorizedRole)
{
_autorizedRole = authorizedRole;
}
// Override any method you want to use your enum
}
用法是:
[MyAuthorize(RolesEnum.Administrator)]
推荐阅读
- powershell - 使用 Invoke-Command 和 Get-CimInstance 将变量传递给远程计算机
- python - 在数据框中创建具有所需内容的列
- ios - 无法从 UITextField 中删除 CALayer
- pandas - Pandas 数据框复制有什么作用?
- fedora - Fedora 32 是否不再支持 rpm-python 包?如果是这样,它的位置是什么?
- android - 无法使用 Firebase 云消息传递在浏览器中打开 URL
- python - 如何使用堆叠在 python 中的相同装饰器?
- excel - 从 Now() 函数单元触发更改事件的问题
- java - 即使 redo() 工作正常,为什么 UndoManager.canRedo() 会返回 false?
- javascript - 如何在javascript中动态添加带有id的列表项?