繁体   English   中英

如何制作强类型的 AuthorizeAttribute

[英]How do I make a strongly typed AuthorizeAttribute

我有一个 blazor Net 5.0 spa 项目

我想将像这样的枚举用于强类型的 AuthorizeAttribute 和 AuthorizeView 用于 Blazor 组件的附加功能,例如检查多个角色是否存在而不是多个角色中的一个

枚举

    public enum RolesEnum
    {
       Access = 1,
       Administrator = 2
    }

如何创建 AuthorizeAttribute 和 AuthorizeView 的扩展版本?

编辑

作为一个简单的开始,我尝试在没有获得授权的情况下制作像这样的 class。 我也尝试将其添加到服务中。

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)]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM