首页 > 解决方案 > 如何制作强类型的 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

我使用错误的方法转换为索赔值

标签: c#blazor

解决方案


您可以简单地继承属性:

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

推荐阅读